201021
authorhgs
Fri, 28 May 2010 17:03:06 +0300
changeset 32 19bd632b5100
parent 31 a0ea99b6fa53
child 34 a206027c856a
child 42 b72428996822
201021
atcommands/lccustomplugin/src/lccustomplugin.cpp
atcommands/lccustomplugin/src/lclistallcmd.cpp
atcommands/modematplugin/src/modematplugin.cpp
bluetoothengine/bteng/src/btengsrvsession.cpp
bluetoothengine/bthid/bthidkbdsettings/data/BthidResource.rss
bluetoothengine/btmac/group/BTMAC.mmp
bluetoothengine/btmac/inc/btmac/btmman.h
bluetoothengine/btmac/inc/btmac/btmpagescanparametersmanager.h
bluetoothengine/btmac/src/btmac/btmman.cpp
bluetoothengine/btmac/src/btmac/btmpagescanparametersmanager.cpp
bluetoothengine/btmac/src/btmac/btmslisten.cpp
bluetoothengine/btnotif/rom/Btnotif.iby
bluetoothengine/btnotif/rom/btnotif.iby
btobexprofiles/group/bld.inf
btobexprofiles/obexreceiveservices/bip/data/101F8671.rss
btobexprofiles/obexreceiveservices/bip/eabi/MtmUiServerBipu.DEF
btobexprofiles/obexreceiveservices/bip/group/bld.inf
btobexprofiles/obexreceiveservices/bip/group/obexservicebip.mmp
btobexprofiles/obexreceiveservices/bip/inc/BIPCapabilityHandler.h
btobexprofiles/obexreceiveservices/bip/inc/BIPController.h
btobexprofiles/obexreceiveservices/bip/inc/BIPImageHandler.h
btobexprofiles/obexreceiveservices/bip/inc/BIPXMLWriter.h
btobexprofiles/obexreceiveservices/bip/inc/debug.h
btobexprofiles/obexreceiveservices/bip/inc/debugconfig.h
btobexprofiles/obexreceiveservices/bip/inc/prjconfig.h
btobexprofiles/obexreceiveservices/bip/src/BIPCapabilityHandler.cpp
btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp
btobexprofiles/obexreceiveservices/bip/src/BIPImageHandler.cpp
btobexprofiles/obexreceiveservices/bip/src/BIPXMLWriter.cpp
btobexprofiles/obexreceiveservices/bip/src/obexservicebip.cpp
btobexprofiles/obexreceiveservices/group/bld.inf
btobexprofiles/obexreceiveservices/mtmuibluetooth/bmarm/BTMTMUIU.DEF
btobexprofiles/obexreceiveservices/mtmuibluetooth/bwins/BTMTMUIU.DEF
btobexprofiles/obexreceiveservices/mtmuibluetooth/data/btmtmui.rss
btobexprofiles/obexreceiveservices/mtmuibluetooth/eabi/btmtmuiU.DEF
btobexprofiles/obexreceiveservices/mtmuibluetooth/group/BtRegistry.mk
btobexprofiles/obexreceiveservices/mtmuibluetooth/group/bld.inf
btobexprofiles/obexreceiveservices/mtmuibluetooth/group/btmtmui.mmp
btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmui.h
btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmuidata.h
btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmuidebug.h
btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmui.cpp
btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmuidata.cpp
btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmuidll.cpp
btobexprofiles/obexreceiveservices/mtmuiinfrared/bmarm/IRMTMUIU.DEF
btobexprofiles/obexreceiveservices/mtmuiinfrared/bwins/IRMTMUIU.DEF
btobexprofiles/obexreceiveservices/mtmuiinfrared/data/irmtmui.rss
btobexprofiles/obexreceiveservices/mtmuiinfrared/eabi/irmtmuiU.DEF
btobexprofiles/obexreceiveservices/mtmuiinfrared/group/IRmtmuiRegistry.mk
btobexprofiles/obexreceiveservices/mtmuiinfrared/group/bld.inf
btobexprofiles/obexreceiveservices/mtmuiinfrared/group/irmtmui.mmp
btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/debug.h
btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/irmtmui.h
btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/irmtmuidata.h
btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmui.cpp
btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmuidata.cpp
btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmuidll.cpp
btobexprofiles/obexreceiveservices/opp/data/101F8636.rss
btobexprofiles/obexreceiveservices/opp/group/bld.inf
btobexprofiles/obexreceiveservices/opp/group/obexserviceopp.mmp
btobexprofiles/obexreceiveservices/opp/inc/debug.h
btobexprofiles/obexreceiveservices/opp/inc/debugconfig.h
btobexprofiles/obexreceiveservices/opp/inc/oppcontroller.h
btobexprofiles/obexreceiveservices/opp/inc/prjconfig.h
btobexprofiles/obexreceiveservices/opp/src/obexserviceopp.cpp
btobexprofiles/obexreceiveservices/opp/src/oppcontroller.cpp
btobexprofiles/obexreceiveservices/rom/mtmuibluetooth.iby
btobexprofiles/obexreceiveservices/rom/mtmuibluetoothresources.iby
btobexprofiles/obexreceiveservices/rom/mtmuiinfrared.iby
btobexprofiles/obexreceiveservices/rom/mtmuiinfraredResources.iby
btobexprofiles/obexreceiveservices/rom/obexservicebip.iby
btobexprofiles/obexreceiveservices/rom/obexserviceopp.iby
btobexprofiles/obexsendservices/BWINS/obexservicesendutilsU.DEF
btobexprofiles/obexsendservices/eabi/obexservicesendutilsu.DEF
btobexprofiles/obexsendservices/group/bld.inf
btobexprofiles/obexsendservices/group/sendutils.mmp
btobexprofiles/obexsendservices/obexhighway/inc/btsendingservicedebug.h
btobexprofiles/obexsendservices/obexhighway/inc/btsendserviceinterface.h
btobexprofiles/obexsendservices/obexhighway/inc/btsendserviceprovider.h
btobexprofiles/obexsendservices/obexhighway/inc/btsssendlisthandler.h
btobexprofiles/obexsendservices/obexhighway/obexhighway.pro
btobexprofiles/obexsendservices/obexhighway/rom/obexhighway.iby
btobexprofiles/obexsendservices/obexhighway/src/btsendserviceinterface.cpp
btobexprofiles/obexsendservices/obexhighway/src/btsendserviceprovider.cpp
btobexprofiles/obexsendservices/obexhighway/src/btsssendlisthandler.cpp
btobexprofiles/obexsendservices/obexhighway/src/main.cpp
btobexprofiles/obexsendservices/obexhighway/xml/obexhighway_conf.xml
btobexprofiles/obexsendservices/obexservicesendutils/bmarm/BTSERVICEUTILSU.DEF
btobexprofiles/obexsendservices/obexservicesendutils/bwins/BTSERVICEUTILSU.DEF
btobexprofiles/obexsendservices/obexservicesendutils/eabi/BtServiceUtilsU.DEF
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTConnectionTimer.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBIPController.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPController.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPObjectRequest.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPObjectServer.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPServerWait.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSController.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSOPPController.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSProgresstimer.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUCapabilityResolver.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUDataConverter.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUDebug.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUImageConverter.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUPassKeyRequest.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSURefObjectResolver.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUXmlParser.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceAPI.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceClient.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceParameterList.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceStarter.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceUtils.h
btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceUtils.inl
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/Bmarm/ObexServiceSendUtilsApiTestU.DEF
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/Bwins/ObexServiceSendUtilsApiTestU.DEF
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/EABI/ObexServiceSendUtilsApiTestU.def
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/conf/ui_ObexServiceSendUtilsApiTest.cfg
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/data/SmallPic.jpg
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest.mmp
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest.pkg
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest_nrm.mmp
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/bld.inf
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/make_and_sign_sis.bat
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/inc/ObexServiceSendUtilsApiTest.h
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/init/ObexServiceSendUtilsApiTest.ini
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/src/ObexServiceSendUtilsApiTest.cpp
btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/src/ObexServiceSendUtilsApiTestBlocks.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTConnectionTimer.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBIPController.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPController.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPObjectRequest.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPObjectServer.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPServerWait.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSController.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSOPPController.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSProgresstimer.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUDataConverter.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUImageConverter.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUPassKeyRequest.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSURefObjectResolver.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUXmlParser.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceAPI.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceClient.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceParameterList.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp
btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceUtils.cpp
btobexprofiles/obexsendservices/rom/obexservicesendutils.iby
btobexprofiles/obexserviceman/BWINS/obexusbapiU.DEF
btobexprofiles/obexserviceman/cenrep/keys_obexserviceman.xls
btobexprofiles/obexserviceman/conf/obexserviceman.confml
btobexprofiles/obexserviceman/conf/obexserviceman_20016BC5.crml
btobexprofiles/obexserviceman/eabi/obexusbapiu.DEF
btobexprofiles/obexserviceman/group/backup_registration.xml
btobexprofiles/obexserviceman/group/bld.inf
btobexprofiles/obexserviceman/group/obexserviceman.mmp
btobexprofiles/obexserviceman/group/obexservicemanclient.mmp
btobexprofiles/obexserviceman/group/obexusbapi.mmp
btobexprofiles/obexserviceman/inc/obexservicemanprivatecrkeys.h
btobexprofiles/obexserviceman/obexservicemanclient/data/0x101F7C88.rss
btobexprofiles/obexserviceman/obexservicemanclient/inc/ObexSMPlugin.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/ObexSMRequester.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/debug.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/debugconfig.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/obexsmclient.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/prjconfig.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/usbclientwrapper.h
btobexprofiles/obexserviceman/obexservicemanclient/inc/usbobex.h
btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMClient.cpp
btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMPlugin.cpp
btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMProxy.cpp
btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMRequester.cpp
btobexprofiles/obexserviceman/obexservicemanclient/src/usbclientwrapper.cpp
btobexprofiles/obexserviceman/obexservicemanclient/src/usbobex.cpp
btobexprofiles/obexserviceman/obexservicemanserver/bwins/SrcsClientU.DEF
btobexprofiles/obexserviceman/obexservicemanserver/eabi/SrcsClientu.DEF
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsClSv.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsMessage.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsSecurityPolicy.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsServiceManager.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsSession.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsTransport.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsTransport.inl
btobexprofiles/obexserviceman/obexservicemanserver/inc/debug.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/obexserviceman.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/obexservicemanprop.h
btobexprofiles/obexserviceman/obexservicemanserver/inc/obexsm.h
btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsMessage.cpp
btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsServiceManager.cpp
btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsSession.cpp
btobexprofiles/obexserviceman/obexservicemanserver/src/obexsm.cpp
btobexprofiles/obexserviceman/obexservicemanserver/src/obexsmmain.cpp
btobexprofiles/obexserviceman/plugins/group/bld.inf
btobexprofiles/obexserviceman/plugins/group/obexservicemanbt.mmp
btobexprofiles/obexserviceman/plugins/group/obexservicemanir.mmp
btobexprofiles/obexserviceman/plugins/group/obexservicemanusb.mmp
btobexprofiles/obexserviceman/plugins/inc/bt/debug.h
btobexprofiles/obexserviceman/plugins/inc/bt/obexsmbtconnection.h
btobexprofiles/obexserviceman/plugins/inc/bt/obexsmpasskey.h
btobexprofiles/obexserviceman/plugins/inc/ir/debug.h
btobexprofiles/obexserviceman/plugins/inc/ir/obexsmirdaconnection.h
btobexprofiles/obexserviceman/plugins/inc/usb/debug.h
btobexprofiles/obexserviceman/plugins/inc/usb/obexsmusbconnection.h
btobexprofiles/obexserviceman/plugins/src/bt/101f7c9d.rss
btobexprofiles/obexserviceman/plugins/src/bt/obexsmbtconnection.cpp
btobexprofiles/obexserviceman/plugins/src/bt/obexsmpasskey.cpp
btobexprofiles/obexserviceman/plugins/src/bt/proxy.cpp
btobexprofiles/obexserviceman/plugins/src/ir/101F9695.rss
btobexprofiles/obexserviceman/plugins/src/ir/obexsmirdaconnection.cpp
btobexprofiles/obexserviceman/plugins/src/ir/proxy.cpp
btobexprofiles/obexserviceman/plugins/src/usb/101F9693.rss
btobexprofiles/obexserviceman/plugins/src/usb/obexsmusbconnection.cpp
btobexprofiles/obexserviceman/plugins/src/usb/proxy.cpp
btobexprofiles/obexserviceman/rom/ObexUtils.iby
btobexprofiles/obexserviceman/rom/ObexUtilsResources.iby
btobexprofiles/obexserviceman/rom/obex.iby
btobexprofiles/obexserviceman/rom/obexserviceman.iby
btobexprofiles/obexserviceman/rom/obexservicemanbt.iby
btobexprofiles/obexserviceman/rom/obexservicemanirda.iby
btobexprofiles/obexserviceman/rom/obexservicemanusb.iby
btobexprofiles/obexserviceman/utils/bmarm/OBEXUTILSU.DEF
btobexprofiles/obexserviceman/utils/bwins/OBEXUTILSU.DEF
btobexprofiles/obexserviceman/utils/data/Obexutils.hrh
btobexprofiles/obexserviceman/utils/data/Obexutils.rss
btobexprofiles/obexserviceman/utils/eabi/obexutilsu.DEF
btobexprofiles/obexserviceman/utils/group/bld.inf
btobexprofiles/obexserviceman/utils/group/obexutils.mmp
btobexprofiles/obexserviceman/utils/inc/obexutilsdebug.h
btobexprofiles/obexserviceman/utils/inc/obexutilsdialog.h
btobexprofiles/obexserviceman/utils/inc/obexutilsdialogtimer.h
btobexprofiles/obexserviceman/utils/inc/obexutilsentryhandler.h
btobexprofiles/obexserviceman/utils/inc/obexutilsglobalprogressdialog.h
btobexprofiles/obexserviceman/utils/inc/obexutilslaunchwaiter.h
btobexprofiles/obexserviceman/utils/inc/obexutilsopaquedata.h
btobexprofiles/obexserviceman/utils/inc/obexutilspropertynotifier.h
btobexprofiles/obexserviceman/utils/inc/obexutilsuilayer.h
btobexprofiles/obexserviceman/utils/inc/updatemusiccollection.h
btobexprofiles/obexserviceman/utils/inc/vMessageHandler.h
btobexprofiles/obexserviceman/utils/loc/Obexutils.loc
btobexprofiles/obexserviceman/utils/src/obexutilsdialog.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsdialogtimer.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsentryhandler.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsglobaldialog.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsglobalprogressdialog.cpp
btobexprofiles/obexserviceman/utils/src/obexutilslaunchwaiter.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsmessagehandler.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsopaquedata.cpp
btobexprofiles/obexserviceman/utils/src/obexutilspropertynotifier.cpp
btobexprofiles/obexserviceman/utils/src/obexutilsuilayer.cpp
btobexprofiles/obexserviceman/utils/src/updatemusiccollection.cpp
btobexprofiles/obexserviceman/utils/src/vMessageHandler.cpp
btservices_plat/group/bld.inf
btservices_plat/obex_secondary_display_notification_api/group/bld.inf
btservices_plat/obex_secondary_display_notification_api/inc/secondarydisplay/obexutilssecondarydisplayapi.h
btservices_plat/obex_secondary_display_notification_api/obex_secondary_display_notification_api.metaxml
btservices_plat/obex_service_plugin_api/group/bld.inf
btservices_plat/obex_service_plugin_api/inc/SrcsInterface.h
btservices_plat/obex_service_plugin_api/inc/SrcsInterface.inl
btservices_plat/obex_service_plugin_api/obex_service_plugin_api.metaxml
btservices_plat/obex_service_utils_api/group/bld.inf
btservices_plat/obex_service_utils_api/inc/obexutilsmessagehandler.h
btservices_plat/obex_service_utils_api/obex_service_utils_api.metaxml
btservices_plat/obex_service_utils_api/tsrc/Bmarm/ObexServAPItestu.def
btservices_plat/obex_service_utils_api/tsrc/Bwins/ObexServAPItestu.def
btservices_plat/obex_service_utils_api/tsrc/conf/obexservapitest.cfg
btservices_plat/obex_service_utils_api/tsrc/eabi/ObexServAPItestu.def
btservices_plat/obex_service_utils_api/tsrc/group/bld.inf
btservices_plat/obex_service_utils_api/tsrc/group/obexservapitest.mmp
btservices_plat/obex_service_utils_api/tsrc/group/obexservapitest.pkg
btservices_plat/obex_service_utils_api/tsrc/inc/ObexServAPItest.h
btservices_plat/obex_service_utils_api/tsrc/inc/testlogger.h
btservices_plat/obex_service_utils_api/tsrc/init/obexservapitest.ini
btservices_plat/obex_service_utils_api/tsrc/rom/obexservapitest.iby
btservices_plat/obex_service_utils_api/tsrc/src/ObexServAPItest.cpp
btservices_plat/obex_service_utils_api/tsrc/src/ObexServAPItestBlocks.cpp
btservices_plat/obex_service_utils_api/tsrc/src/testlogger.cpp
btservices_plat/usb_obexservicemanager_client_api/group/bld.inf
btservices_plat/usb_obexservicemanager_client_api/inc/usbobex.h
cbsatplugin/atmisccmdplugin/data/2002C3BA.rss
cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp
cbsatplugin/atmisccmdplugin/inc/atcmdasyncbase.h
cbsatplugin/atmisccmdplugin/inc/atcmdbase.h
cbsatplugin/atmisccmdplugin/inc/atcmdsyncbase.h
cbsatplugin/atmisccmdplugin/inc/atcommandparser.h
cbsatplugin/atmisccmdplugin/inc/atmisccmdplugin.h
cbsatplugin/atmisccmdplugin/inc/atmisccmdpluginconsts.h
cbsatplugin/atmisccmdplugin/inc/cbccommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cfuncommandhandler.h
cbsatplugin/atmisccmdplugin/inc/clckcommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cnumcommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cpincommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cpwdcommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cusdcommandhandler.h
cbsatplugin/atmisccmdplugin/inc/cusdreadwriteimp.h
cbsatplugin/atmisccmdplugin/inc/ussdreadmessageimpl.h
cbsatplugin/atmisccmdplugin/inc/ussdsendmessageimpl.h
cbsatplugin/atmisccmdplugin/src/atcmdasyncbase.cpp
cbsatplugin/atmisccmdplugin/src/atcmdsyncbase.cpp
cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp
cbsatplugin/atmisccmdplugin/src/atmisccmdplugin.cpp
cbsatplugin/atmisccmdplugin/src/atmisccmdpluginbase.cpp
cbsatplugin/atmisccmdplugin/src/cbccommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cbsettinghandler.cpp
cbsatplugin/atmisccmdplugin/src/cfuncommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/clckcommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cnumcommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cpincommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cpwdcommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cusdcommandhandler.cpp
cbsatplugin/atmisccmdplugin/src/cusdreadwriteimp.cpp
cbsatplugin/atmisccmdplugin/src/ussdreadmessageimpl.cpp
cbsatplugin/atmisccmdplugin/src/ussdsendmessageimpl.cpp
group/bld.inf
--- a/atcommands/lccustomplugin/src/lccustomplugin.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/atcommands/lccustomplugin/src/lccustomplugin.cpp	Fri May 28 17:03:06 2010 +0300
@@ -278,14 +278,7 @@
     switch ( aReplyType )
         {
         case EReplyTypeOther:
-            if ( iQuietMode )
-                {
-                iReplyBuffer.Create( KNullDesC8 );
-                }
-            else
-                {
-                iReplyBuffer.Create( aSrcBuffer );
-                }
+            iReplyBuffer.Create( aSrcBuffer );
             break;
         case EReplyTypeOk:
             CreateOkOrErrorReply( iReplyBuffer, ETrue );
--- a/atcommands/lccustomplugin/src/lclistallcmd.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/atcommands/lccustomplugin/src/lclistallcmd.cpp	Fri May 28 17:03:06 2010 +0300
@@ -142,13 +142,6 @@
         return;
         }
     RBuf8 reply;
-    if ( quietMode )
-        {
-        iCallback->CreateReplyAndComplete( EReplyTypeOther, reply );
-        reply.Close();
-        TRACE_FUNC_EXIT
-        return;
-        }
     TBool error = CreateSupportedList( reply );
     if ( error )
         {
--- a/atcommands/modematplugin/src/modematplugin.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/atcommands/modematplugin/src/modematplugin.cpp	Fri May 28 17:03:06 2010 +0300
@@ -283,14 +283,7 @@
     switch ( aReplyType )
         {
         case EReplyTypeOther:
-            if ( iQuietMode )  //  In quite mode there should be no response at all. 
-                {
-                iReplyBuffer.Create( KNullDesC8 );
-                }
-            else
-                {
-                iReplyBuffer.Create( aSrcBuffer ); 
-                }
+            iReplyBuffer.Create( aSrcBuffer );
             break;
         case EReplyTypeOk:
             CreateOkOrErrorReply( iReplyBuffer, ETrue );
--- a/bluetoothengine/bteng/src/btengsrvsession.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/bteng/src/btengsrvsession.cpp	Fri May 28 17:03:06 2010 +0300
@@ -188,6 +188,8 @@
         {
         case EBTEngSetPowerState:
             {
+            // Store auto off information
+            iAutoSwitchOff = (TBool) aMessage.Int1();
             Server()->SetPowerStateL( aMessage );
             }
             break;
--- a/bluetoothengine/bthid/bthidkbdsettings/data/BthidResource.rss	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/bthid/bthidkbdsettings/data/BthidResource.rss	Fri May 28 17:03:06 2010 +0300
@@ -98,11 +98,13 @@
             command=EBTKeyCmdAppChange;
             txt = qtn_hid_change;
             },
+#ifdef __SERIES60_HELP
         MENU_ITEM 
             { 
-            command=EBTKeyCmdAppHelp;
-            txt = qtn_hid_help;
+            command = EBTKeyCmdAppHelp; 
+            txt = qtn_options_help; 
             },
+#endif
         MENU_ITEM 
             {
             command=EEikCmdExit; 
--- a/bluetoothengine/btmac/group/BTMAC.mmp	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/btmac/group/BTMAC.mmp	Fri May 28 17:03:06 2010 +0300
@@ -51,6 +51,7 @@
 SOURCE      btmstempd.cpp
 SOURCE      btmsreconnect.cpp
 SOURCE      btmsdisconnect.cpp
+SOURCE      btmpagescanparametersmanager.cpp
 
 USERINCLUDE ../inc/btmac ../common
 SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom
--- a/bluetoothengine/btmac/inc/btmac/btmman.h	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/btmac/inc/btmac/btmman.h	Fri May 28 17:03:06 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  the entry of this plugin.
-*  Version     : %version: 12.1.7 %
+*  Version     : %version: 12.1.7.1.1 %
 *
 */
 
@@ -38,6 +38,7 @@
 class CBtmState;
 class CBtmActive;
 class CBtmcHandlerApi;
+class CBtmPageScanParametersManager;
 
 /**
  * the main class of BTMAC.
@@ -167,7 +168,11 @@
      * @param aAddr the address of the remote device.
      */
     void SetCmdHandlerRvcSupport( const TBTDevAddr& aAddr );
-    
+
+    void StartedListenning();
+
+    void StoppedListenning();
+
 private:
     // From base class CBTAccPlugin
 
@@ -328,6 +333,8 @@
     TBool iEdr;
     
     CBTEngDiscovery* iBteng;
+
+    CBtmPageScanParametersManager* iPageScanParametersManager;
     };
 
 #endif // C_BTMMAN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/inc/btmac/btmpagescanparametersmanager.h	Fri May 28 17:03:06 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:
+//
+
+#ifndef BTMPAGESCANPARAMETERSMANAGER_H
+#define BTMPAGESCANPARAMETERSMANAGER_H
+
+#include <e32base.h>
+#include <e32property.h>
+#include "btmactive.h"
+
+class CBtmPageScanParametersManager : public CBase, public MBtmActiveObserver
+    {
+public:
+    static CBtmPageScanParametersManager* NewL();
+    ~CBtmPageScanParametersManager();
+
+    void Activate();
+    void Deactivate();
+
+private:  // From MBtmActiveObserver
+    void RequestCompletedL(CBtmActive& aActive);
+    void CancelRequest(CBtmActive& aActive);
+
+private:
+    void StartTimer(TInt aService, TInt aTimeout);
+    void StopTimer();
+
+    void DisableFastConnection();
+
+protected:
+    CBtmPageScanParametersManager();
+    void ConstructL();
+
+protected:
+    RProperty       iCallStateKey;
+    CBtmActive*     iCallStateListener;
+    RProperty       iPageScanParametersKey;
+    CBtmActive*     iPageScanParametersListener;
+    RTimer          iTimer;
+    CBtmActive*     iTimerActive;
+    TBool           iIsBeingDeactivated;
+    };
+
+#endif // C_BTMSDISCONNECT_H
--- a/bluetoothengine/btmac/src/btmac/btmman.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/btmac/src/btmac/btmman.cpp	Fri May 28 17:03:06 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  CBtmMan definition
-*  Version     : %version: 15.1.8 %
+*  Version     : %version: 15.1.8.1.1 %
 *
 */
 
@@ -27,6 +27,7 @@
 #include "btmactive.h"
 #include "btmstate.h"
 #include "btmslisten.h"
+#include "btmpagescanparametersmanager.h"
 #include "debug.h"
 
 
@@ -71,6 +72,7 @@
     DeleteAllRegisteredServices();
     delete iBteng;
     iServices.Close();
+    delete iPageScanParametersManager;
     TRACE_FUNC_EXIT
     }
 
@@ -452,10 +454,30 @@
     iEdr = (edr == EBTEScoSupported) ? ETrue : EFalse;
     TRACE_INFO((_L("EDR feature %d"), iEdr))
     iBteng = CBTEngDiscovery::NewL();
+    TRAP_IGNORE(iPageScanParametersManager = CBtmPageScanParametersManager::NewL());
     CBtmState* state = CBtmsListen::NewL(*this);
     CleanupStack::PushL(state);
     ChangeStateL(state);
     CleanupStack::Pop(state);
     TRACE_FUNC_EXIT
     }
-    
+
+void CBtmMan::StartedListenning()
+    {
+    TRACE_FUNC_ENTRY
+    if (iPageScanParametersManager)
+        {
+        iPageScanParametersManager->Activate();
+        }
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmMan::StoppedListenning()
+    {
+    TRACE_FUNC_ENTRY
+    if (iPageScanParametersManager)
+        {
+        iPageScanParametersManager->Deactivate();
+        }
+    TRACE_FUNC_EXIT
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/btmac/btmpagescanparametersmanager.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,295 @@
+// 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:
+//
+
+#include "btmpagescanparametersmanager.h"
+#include <ctsydomainpskeys.h>
+#include <bt_subscribe.h>
+#include <bt_subscribe_partner.h>
+#include <bttypespartner.h>
+#include "debug.h"
+
+// in the current configuration an incoming call ringing limit is 30 seconds
+// if for some reason we don't receive the call state change
+// we disable fast connection page scan settings in 35 seconds
+const TInt KFastConnectionTime              = 35000000;
+// a timeout for resetting page scan settings
+// if we don't receive a confirmation we try to reset again
+const TInt KRestoreStandardParametersTime   = 1000000;
+
+const TInt KCallStateListenerService            = 8;
+const TInt KPageScanParametersListenerService   = 9;
+const TInt KFastConnectionService               = 10;
+const TInt KRestoreStandardParametersService    = 11;
+
+CBtmPageScanParametersManager::CBtmPageScanParametersManager()
+    :  iIsBeingDeactivated(EFalse)
+    {
+    }
+
+CBtmPageScanParametersManager::~CBtmPageScanParametersManager()
+    {
+    TRACE_FUNC_ENTRY
+    delete iTimerActive;
+    iTimer.Close();
+    if (iCallStateKey.Handle())
+        {
+        iCallStateKey.Cancel();
+        }
+    delete iPageScanParametersListener;
+    iCallStateKey.Close();
+    if (iPageScanParametersKey.Handle())
+        {
+        iPageScanParametersKey.Cancel();
+        }
+    delete iCallStateListener;
+    iPageScanParametersKey.Close();
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmPageScanParametersManager::ConstructL()
+    {
+    TRACE_FUNC_ENTRY
+    LEAVE_IF_ERROR(iCallStateKey.Attach(KPSUidCtsyCallInformation, KCTsyCallState));
+    iCallStateListener = CBtmActive::NewL(*this, CActive::EPriorityStandard,
+                                          KCallStateListenerService);
+
+    LEAVE_IF_ERROR(iPageScanParametersKey.Attach(KPropertyUidBluetoothCategory,
+                                                 KPropertyKeyBluetoothGetPageScanParameters));
+    iPageScanParametersListener = CBtmActive::NewL(*this, CActive::EPriorityStandard,
+                                                   KPageScanParametersListenerService);
+
+    iTimerActive = CBtmActive::NewL(*this, CActive::EPriorityStandard, KFastConnectionService);
+    TRACE_FUNC_EXIT
+    }
+
+CBtmPageScanParametersManager* CBtmPageScanParametersManager::NewL()
+    {
+    TRACE_STATIC_FUNC_ENTRY
+    CBtmPageScanParametersManager* self = new( ELeave ) CBtmPageScanParametersManager();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CBtmPageScanParametersManager::StartTimer(TInt aService, TInt aTimeout)
+    {
+    if (!iTimerActive->IsActive())
+        {
+        TRACE_FUNC_ENTRY
+        iTimer.CreateLocal();
+        iTimer.After(iTimerActive->iStatus, aTimeout);
+        iTimerActive->SetRequestId(aService);
+        iTimerActive->GoActive();
+        TRACE_FUNC_EXIT
+        }
+    else
+        {
+        TRACE_WARNING(_L("WARNING, page scan manager timer is already active"))
+        }
+    }
+
+void CBtmPageScanParametersManager::StopTimer()
+    {
+    if (iTimerActive->IsActive())
+        {
+        TRACE_FUNC_ENTRY
+        iTimerActive->Cancel();
+        iTimer.Close();
+        TRACE_FUNC_EXIT
+        }
+    }
+
+void CBtmPageScanParametersManager::RequestCompletedL(CBtmActive& aActive)
+    {
+    TRACE_FUNC_ENTRY
+    TRACE_INFO((_L("request id %d status %d"), aActive.RequestId(), aActive.iStatus.Int()))
+    if (aActive.iStatus.Int() == KErrNone)
+        {
+        switch (aActive.RequestId())
+            {
+            case KCallStateListenerService:
+                {
+                iCallStateKey.Subscribe(aActive.iStatus);
+                aActive.GoActive();
+
+                TInt callState;
+                TInt ret = iCallStateKey.Get(callState);
+                if (ret == KErrNone)
+                    {
+                    TRACE_INFO((_L("call state received %d"), callState))
+                    if (callState == EPSCTsyCallStateRinging)
+                        {
+                        // an incoming call ringing => switch to fast page scanning
+                        TRACE_INFO((_L("switching to fast page scanning")))
+                        (void) RProperty::Set(KPropertyUidBluetoothCategory,
+                                              KPropertyKeyBluetoothSetPageScanParameters,
+                                              EFastConnectionPageScanParameters);
+
+                        // we will disable fast page scanning when the timer gets expired
+                        StartTimer(KFastConnectionService, KFastConnectionTime);
+                        }
+                    else if (iTimerActive->IsActive() && iTimerActive->RequestId() == KFastConnectionService)
+                        {
+                        // the incoming call is not ringing anymore => switch to standard page scanning
+                        TRACE_INFO((_L("switching to standard page scanning")))
+                        DisableFastConnection();
+                        }
+                    }
+                break;
+                }
+
+            case KPageScanParametersListenerService:
+                {
+                iPageScanParametersKey.Subscribe(aActive.iStatus);
+                aActive.GoActive();
+
+                TInt pageScanParameters;
+                TInt ret = iPageScanParametersKey.Get(pageScanParameters);
+                if (ret == KErrNone)
+                    {
+                    TRACE_INFO((_L("page scan parameters received %d"), pageScanParameters))
+                    if (iTimerActive->IsActive() && iTimerActive->RequestId() == KRestoreStandardParametersService
+                        && pageScanParameters == EStandardPageScanParameters)
+                        {
+                        TRACE_INFO((_L("standard page scan parameters enabled")))
+                        StopTimer();
+                        if (iIsBeingDeactivated)
+                            {
+                            TRACE_INFO((_L("page scan parameters service is stopped")))
+                            iPageScanParametersKey.Cancel();
+                            }
+                        }
+                    }
+                break;
+                }
+
+            case KFastConnectionService:
+            case KRestoreStandardParametersService:
+                {
+                // try to reset the page scan setting because it hasn't been confirmed yet
+                TRACE_INFO((_L("timer expired, switching to standard page scanning")))
+                DisableFastConnection();
+                break;
+                }
+
+            default:
+                {
+                TRACE_WARNING(_L("WARNING, unknown service"))
+                break;
+                }
+            }
+        }
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmPageScanParametersManager::CancelRequest(CBtmActive& aActive)
+    {
+    TRACE_FUNC_ENTRY
+    switch (aActive.RequestId())
+        {
+        case KFastConnectionService:
+        case KRestoreStandardParametersService:
+            {
+            iTimer.Cancel();
+            break;
+            }
+        default:
+            break;
+        }
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmPageScanParametersManager::DisableFastConnection()
+    {
+    TRACE_FUNC_ENTRY
+    StopTimer();
+
+    // switch to standard page scanning
+    (void) RProperty::Set(KPropertyUidBluetoothCategory,
+                          KPropertyKeyBluetoothSetPageScanParameters,
+                          EStandardPageScanParameters);
+
+    // we will disable fast page scanning when the timer gets expired
+    StartTimer(KRestoreStandardParametersService, KRestoreStandardParametersTime);
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmPageScanParametersManager::Activate()
+    {
+    TRACE_FUNC_ENTRY
+    iIsBeingDeactivated = EFalse;
+
+    if (!iCallStateListener->IsActive())
+        {
+        iCallStateKey.Subscribe(iCallStateListener->iStatus);
+        iCallStateListener->GoActive();
+        }
+    else
+        {
+        TRACE_WARNING(_L("WARNING, call state is already being listened"))
+        }
+
+    if (!iPageScanParametersListener->IsActive())
+        {
+        iPageScanParametersKey.Subscribe(iPageScanParametersListener->iStatus);
+        iPageScanParametersListener->GoActive();
+        }
+    else
+        {
+        TRACE_WARNING(_L("WARNING, call state is already being listened"))
+        }
+
+    TInt callState;
+    TInt err = RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callState);
+    if(err == KErrNone && callState == EPSCTsyCallStateRinging)
+        {
+        // an incoming call already ringing => switch to fast page scanning
+        TRACE_INFO((_L("call is already ringing, switching to fast page scanning")))
+        (void) RProperty::Set(KPropertyUidBluetoothCategory,
+                              KPropertyKeyBluetoothSetPageScanParameters,
+                              EFastConnectionPageScanParameters);
+
+        // we will disable fast page scanning when the timer gets expired
+        StartTimer(KFastConnectionService, KFastConnectionTime);
+        }
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmPageScanParametersManager::Deactivate()
+    {
+    TRACE_FUNC_ENTRY
+    iIsBeingDeactivated = ETrue;
+
+    // stop call state listening
+    iCallStateKey.Cancel();
+
+    if (iTimerActive->IsActive())
+        {
+        // if fast page scanning is active, disable it
+        // if we're already switching to standard page scanning, do nothing
+        if (iTimerActive->RequestId() == KFastConnectionService)
+            {
+            TRACE_INFO((_L("deactivation started, switching to standard page scanning")))
+            DisableFastConnection();
+            }
+        }
+    else
+        {
+        // if no timer is active we just stop page scan parameters listening
+        iPageScanParametersKey.Cancel();
+        }
+    TRACE_FUNC_EXIT
+    }
--- a/bluetoothengine/btmac/src/btmac/btmslisten.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/bluetoothengine/btmac/src/btmac/btmslisten.cpp	Fri May 28 17:03:06 2010 +0300
@@ -43,6 +43,7 @@
     {
     delete iHfpSock;
     delete iHspSock;
+    Parent().StoppedListenning();
     }
 
 void CBtmsListen::EnterL()
@@ -83,6 +84,7 @@
     TRACE_STATE((_L("[BTMAC State] Start EBTProfileHSP, last used port %d"), lastUsedPort)) 
     Parent().RegisterServiceL(ag, iHspSock->ListenL(ag, sec,lastUsedPort));
     iHspSock->SetService(EBTProfileHSP);
+    Parent().StartedListenning();
     }
 
 void CBtmsListen::OpenAudioLinkL(const TBTDevAddr& aAddr, TRequestStatus& aStatus)
--- a/bluetoothengine/btnotif/rom/Btnotif.iby	Mon May 17 11:06:23 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
-* Copyright (c) 2003-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:  Image description file for project btnotif
-*
-*/
-
-
-#ifndef BTNOTIF_IBY
-#define BTNOTIF_IBY
-
-#include <data_caging_paths_for_iby.hrh>
-
-#ifdef __BT
-
-file=ABI_DIR/BUILD_DIR/btnotifsrv.exe    SHARED_LIB_DIR/btnotifsrv.exe
-ECOM_PLUGIN( btnotifwrapper.dll, btnotifwrapper.rsc )
-
-#endif // __BT
-
-#endif // BTNOTIF_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btnotif/rom/btnotif.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2003-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:  Image description file for project btnotif
+*
+*/
+
+
+#ifndef BTNOTIF_IBY
+#define BTNOTIF_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef __BT
+
+file=ABI_DIR/BUILD_DIR/btnotifsrv.exe    SHARED_LIB_DIR/btnotifsrv.exe
+ECOM_PLUGIN( btnotifwrapper.dll, btnotifwrapper.rsc )
+
+#endif // __BT
+
+#endif // BTNOTIF_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* 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:  Build information file for collection btobexprofiles
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+#include "../obexreceiveservices/group/bld.inf"
+#include "../obexsendservices/group/bld.inf"
+#include "../obexserviceman/group/bld.inf"
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/data/101F8671.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2005 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:  PC Connectivity Plug-in resource file
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x101F8671;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x101F7C8C;
+			implementations = 
+				{
+				// Info for CSConPCConnplugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x101F8671;
+					version_no = 1;
+					display_name = "Obex Services";
+					default_data = "OBEX/BT";
+					
+					// 
+					// opaque_data contains parameters used by following API calls in SRCS:
+					// 1. Setup USB interface string descriptor in Unicode;
+					// 2. TInt CObex::SetLocalWho(const TDesC8& aInfo);
+					// 3. TInt CBTConnection::RegisterSecuritySettingsL( TUint aService,
+					//						 TInt  aProtocol,
+					//						 TInt  aChannel,
+					//						 TBool aAuthenticate,
+					//						 TBool aAuthorise,
+					//						 TBool aEncrypt );
+					// opaque_data = "@0||@1||@2||@3||@4||@5||@6"
+					// @0 aStrDesc		e.g. "PC Connectivity"
+					// @1 aInfo			e.g. KFolderBrowsingID, "\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09"
+					// @2 aService		e.g. KBTSecurityUidFileTransfer, 0x1106
+					// @3 aProtocol		e.g. KSolBtRFCOMM, 0x1013
+					// @4 aAuthenticate	e.g. EFalse, 0
+					// @5 aAuthorise	e.g. EFalse, 0
+					// @6 aEncrypt		e.g. EFalse, 0
+					//
+					opaque_data = "OBEX|"\
+					              "|\xE3\x3D\x95\x45\x83\x74\x4A\xD7\x9E\xC5\xC1\x6B\xE3\x1E\xDE\x8E|"\
+					              "|0x111b|"\
+					              "|0x1013|"\
+					              "|0|"\
+					              "|1|"\
+					              "|0|"\
+					              "|0xfffE|"\
+					              "|0xfffE";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/eabi/MtmUiServerBipu.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z18NewMessageHandlerLv @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2002 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:  This file provides the information required for building the
+*    		  whole of a MtmUiServerBip.
+*
+*/
+
+
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+../group/obexservicebip.mmp
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/group/obexservicebip.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2002 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:  This is project specification file for the obexserviceopp.
+*
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET      obexservicebip.dll
+CAPABILITY  CAP_GENERAL_DLL
+TARGETTYPE  PLUGIN
+UID         0x10009d8d    0x101F8671
+VENDORID    VID_DEFAULT
+
+SOURCEPATH  ../src
+SOURCE      obexservicebip.cpp
+SOURCE      BIPController.cpp
+SOURCE	    BIPCapabilityHandler.cpp
+SOURCE      BIPXMLWriter.cpp
+SOURCE	    BIPImageHandler.cpp
+
+
+
+START RESOURCE  ../data/101F8671.rss
+  TARGET        obexservicebip.rsc
+END
+
+
+USERINCLUDE ../inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib           // Base library
+LIBRARY         irobex.lib          // For Object exchange
+LIBRARY         efsrv.lib
+LIBRARY	    	imageconversion.lib
+LIBRARY         bafl.lib
+LIBRARY         obexutils.lib 
+LIBRARY         ecom.lib
+LIBRARY         aknnotify.lib
+LIBRARY         avkon.lib
+LIBRARY         sysutil.lib
+LIBRARY         platformenv.lib
+LIBRARY			esock.lib
+LIBRARY 		bluetooth.lib                       // Bluetooth libraries
+LIBRARY 		btdevice.lib                        // Bluetooth library
+LIBRARY			btmanclient.lib
+
+//Bteng APIs
+LIBRARY 		btengdevman.lib				//btengdevman.dll
+LIBRARY 		btengsettings.lib			//btengsettings.dll
+LIBRARY 		btengconnman.lib			//btengconnman.dll
+
+
+DEBUGLIBRARY 	flogger.lib         // For logging
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/BIPCapabilityHandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002 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:  Capability object handler class declaration
+*
+*/
+
+
+#ifndef _BIPCAPABILITYHANDLER_H
+#define _BIPCAPABILITYHANDLER_H
+
+//INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include "debug.h"
+
+// FORWARD DECLARATIONS
+class CBIPXmlWriter;
+class CImageTypeDescription;
+
+// CLASS DECLARATION
+
+/**
+*  Creates an xml capability object
+*/
+NONSHARABLE_CLASS (CBIPCapabilityHandler) : public CBase
+    {
+    public: //Constructors and destructors
+        /**
+        * Two-phased constructor.
+        */
+        static CBIPCapabilityHandler* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBIPCapabilityHandler();
+
+    public:     //New Functions
+                      
+        /**
+        * Creates an array of supported image types.
+        * @param    aFileName       On return contains the name
+        *                           of the file that was created
+        * @return                   None.
+        */
+        void CreateCapabilityObjectL( TFileName& aFileName );
+        
+        /**
+        * Creates an array of supported image types.
+        * @param                    None.
+        * @return                   None.
+        */
+        void SupportedImageTypesL( );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBIPCapabilityHandler();
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+    
+    private:    // Data
+        CBIPXmlWriter*          iBIPXmlWriter;
+        CDesC8ArrayFlat*        iImageTypeArray;
+    };
+
+#endif      //_BIPCAPABILITYHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/BIPController.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2004 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:  Bip controller class declaration.
+*
+*/
+
+
+#ifndef _BIPCONTROLLER_H
+#define _BIPCONTROLLER_H
+
+//INCLUDES
+
+#include <e32base.h>
+#include <obex.h>
+#include <obexutilsmessagehandler.h>
+#include <obexutilsuilayer.h>
+#include <obexutilsdialog.h>
+#include "obexutilspropertynotifier.h"
+#include "debug.h"
+#include <SrcsInterface.h>
+#include <obexutilspropertynotifier.h>
+#include <obexutilsglobalprogressdialog.h>
+#include <btengsettings.h>
+#include "btengdevman.h"
+#include <obexutilsdialog.h>
+
+// FORWARD DECLARATIONS
+
+class CBIPCapabilityHandler;
+class CBIPImageHandler;
+
+
+// CLASS DECLARATION
+
+/**
+*  The main controller for Basic Imaging Profile.
+*/
+NONSHARABLE_CLASS (CBIPController): public CSrcsInterface, public MObexServerNotify,
+                                    public MObexUtilsPropertyNotifyHandler, 
+                                    public MGlobalProgressCallback, public MGlobalNoteCallback,
+                                    public MBTEngDevManObserver
+    {
+public:
+    static CBIPController* NewL();
+    ~CBIPController();
+    
+private: // from CSrcsInterface
+    TBool IsOBEXActive();
+    void SetMediaType(TSrcsMediaType aMediaType);
+    TInt SetObexServer(CObexServer* aServer);
+
+private: // from MObexServerNotify
+    void ErrorIndication(TInt aError);
+    void TransportUpIndication();
+    void TransportDownIndication();
+    TInt ObexConnectIndication(const TObexConnectInfo& aRemoteInfo, const TDesC8& aInfo);
+    void ObexDisconnectIndication(const TDesC8& aInfo);
+    CObexBufObject* PutRequestIndication();
+    TInt PutPacketIndication();
+    TInt PutCompleteIndication();
+    CObexBufObject* GetRequestIndication(CObexBaseObject* aRequiredObject);
+    TInt GetPacketIndication();
+    TInt GetCompleteIndication();
+    TInt SetPathIndication(const CObex::TSetPathInfo& aPathInfo, const TDesC8& aInfo);
+    void AbortIndication();
+    
+private: // from MObexUtilsPropertyNotifyHandler
+    void HandleNotifyL(TMemoryPropertyCheckType aCheckType);
+    
+private: // from MGlobalProgressCallback
+    void HandleGlobalProgressDialogL(TInt aSoftkey); 
+    
+private: // from MGlobalNoteCallback
+    void HandleGlobalNoteDialogL(TInt aSoftkey);
+    
+private: // from MBTEngDevManObserver
+    void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray);
+    
+private:
+    CBIPController();
+    void ConstructL();
+    
+    void CancelTransfer();
+    
+    void HandleError(TBool aAbort);
+    void HandleGetCapabilityRequestL();
+    void HandlePutImageRequestL();
+    TInt HandlePutCompleteIndication();
+    TInt RemoveCapabilityObject();
+    
+    TBool CheckCapacityL();
+    void LaunchReceivingIndicatorL();
+    inline TBool ReceivingIndicatorActive() const { return (iProgressDialog || iWaitDialog); }
+    void UpdateReceivingIndicator();
+    void CloseReceivingIndicator(TBool aResetDisplayedState = ETrue);
+    TInt GetDriveWithMaximumFreeSpaceL();
+    
+private:
+    enum TBipTransferState
+        {
+        ETransferIdle,
+        ETransferPut,
+        ETransferGet,
+        ETransferPutDiskError,
+        ETransferPutInitError,
+        ETransferPutCancel,
+        };
+    
+private: // Data
+    CBIPCapabilityHandler*      iBIPCapabilityHandler;
+    CObexBufObject*             iBTObject;
+    CObexServer*                iBTObexServer;
+    TBipTransferState           iBTTransferState;
+    TInt                        iDrive;
+    CBIPImageHandler*           iBIPImageHandler;
+    CObexBufObject*             iGetObject;
+    CObexUtilsPropertyNotifier* iLowMemoryActiveCDrive;
+    CObexUtilsPropertyNotifier* iLowMemoryActiveMMC;
+    TMsvId                      iMsvIdParent;
+    TMsvId                      iMsvIdAttach;
+    RFile                       iFile;
+    RFs                         iFs;
+    TFileName                   iFullPathFilename;
+    TFileName                   iCapabilityFileName;
+    TFileName                   iDefaultFolder;
+    TFileName                   iPreviousDefaultFolder;
+    CBufFlat                    *iBuf;
+    TBool                       iLengthHeaderReceived;
+    TInt                        iTotalSizeByte;
+    CGlobalProgressDialog*      iProgressDialog;
+    CGlobalDialog*              iWaitDialog;
+    TBool                       iNoteDisplayed;
+    CBTEngDevMan*               iDevMan;
+    CBTDeviceArray*             iResultArray;
+    TBTDeviceName               iRemoteDeviceName;
+    TFileName                   iReceivingFileName;
+    TFileName                   iCenRepFolder;
+    };
+    
+_LIT(KBipPanicCategory, "BIP");
+enum TBipPanicCode
+    {
+    EBipPanicNotBluetoothMediaType = 0,
+    };
+
+#endif      //_BIPCONTROLLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/BIPImageHandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2002 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:  Bip image handler class declaration.
+*
+*/
+
+
+#ifndef _BIPIMAGEHANDLER_H
+#define _BIPIMAGEHANDLER_H
+
+//INCLUDES
+#include <e32base.h>
+#include <obex.h>
+#include "debug.h"
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  Generates image handles and sets them to obex response packets.
+*/
+NONSHARABLE_CLASS (CBIPImageHandler) : public CBase
+    {
+    public: //Constructors and destructors
+
+        /**
+        * Two-phased constructor.
+        */
+        static CBIPImageHandler* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBIPImageHandler();
+
+    public:     //New Functions
+
+		/**
+        * Adds Image handle to Obex response packet
+        * @param    aObexServer         Current obex server
+        * @return                       None.
+        */
+        void AddImageHandleHeaderL( CObexServer* aObexServer );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBIPImageHandler();
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+    
+    private:    // Data
+        TUint           iImageHandleValue;
+        
+    };
+
+#endif      //_BIPIMAGEHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/BIPXMLWriter.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2002 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:  XML writer class declaration.
+*
+*/
+
+
+#ifndef _BIPXMLWRITER_H
+#define _BIPXMLWRITER_H
+
+//INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include <obexutilsuilayer.h>
+#include "debug.h"
+
+// CONSTANTS
+enum TElementType
+    {
+    EImageFormats,
+    EPreferredFormat,
+    EAttachmentFormats,
+    EFilteringParameters,
+    EDPOFOptions
+    };
+
+enum TAttributeType
+    {
+    EEncoding,
+    EPixel,
+    ETransformation,
+    EMaxSize
+    };
+
+// CLASS DECLARATION
+
+/**
+* XML writer for BIP capability object
+*
+*/
+NONSHARABLE_CLASS (CBIPXmlWriter) : public CBase
+    {
+    public: //Constructors and destructors
+
+        /**
+        * Two-phased constructor.
+        */
+        static CBIPXmlWriter* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBIPXmlWriter();
+
+    public:     //New Functions               
+
+		/**
+        * Open temporary file
+        * @param    TFileName       Contains the new temp file name.
+        * @return                   None.
+        */
+        void OpenXmlDocumentL( TFileName& aFileName);
+    
+		/**
+        * Close temporary file. So that it can be used by clients
+        * @param                    None.
+        * @return                   None.
+        */
+        void CloseXmlDocumentL();
+    
+		/**
+        * Opens xml element for writing
+        * @param    TElementType    Element to be written to file
+        * @return                   None.
+        */
+        void OpenXmlElementL( TElementType aElement );
+
+		/**
+        * Close xml element 
+        * @param                    None
+        * @return                   None.
+        */
+        void CloseXmlElementL( );
+
+		/**
+        * Add xml attribute to the open element
+        * @param    TAttributeType  Type of the attribute
+        * @param    TDesC8          Attribute
+        * @return                   None.
+        */
+        void AddXmlAttributeL( TAttributeType aAttributeType, TDesC8& aAttr );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBIPXmlWriter();
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+
+    private:    // Data
+        
+        RFile       ifile;
+        RFs         iFileSession;
+        TFileName   iFileName;
+    };
+
+#endif      //_BIPXMLWRITER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* 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:  Logging definition
+*
+*/
+
+
+#ifndef PRJ_LOGGING_H
+#define PRJ_LOGGING_H
+
+#include "debugconfig.h"
+
+#ifdef PRJ_ENABLE_TRACE
+
+#ifdef PRJ_FILE_TRACE
+#include <flogger.h>
+#else
+#include <e32debug.h>
+#endif
+
+const TInt KMaxLogLineLength = 512;
+
+#define KPRINTERROR        0x00000001 // Tracing level: error
+#define KPRINTINFO        0x00000002 // Tracing level: function trace
+#define KPRINTSTATE        0x00000004 // Tracing level: state machine info
+#define KPRINTWARNING   0x00000008 // Tracing level: warning
+
+const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING;
+
+NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
+    {
+public:
+    void Overflow(TDes16& /*aDes*/) {}
+    };
+
+NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
+    {
+public:
+    void Overflow(TDes8& /*aDes*/) {}
+    };
+
+inline void Trace(TRefByValue<const TDesC16> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TBuf16<KMaxLogLineLength> theFinalString;
+    theFinalString.Append(KTracePrefix16);
+    TOverflowTruncate16 overflow;
+    theFinalString.AppendFormatList(aFmt,list,&overflow);
+    RDebug::Print(theFinalString);
+#endif
+    }
+
+inline void Trace(TRefByValue<const TDesC8> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list, aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TOverflowTruncate8 overflow;
+    TBuf8<KMaxLogLineLength> buf8;
+    buf8.Append(KTracePrefix8);
+    buf8.AppendFormatList(aFmt, list, &overflow);
+    TBuf16<KMaxLogLineLength> buf16(buf8.Length());
+    buf16.Copy(buf8);
+    TRefByValue<const TDesC> tmpFmt(_L("%S"));
+    RDebug::Print(tmpFmt, &buf16);
+#endif
+    }
+
+inline void TracePanic(
+    char* aFile, 
+    TInt aLine,
+    TInt aPanicCode,
+    const TDesC& aPanicCategory)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KPanicPrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName);
+    Trace(buf);
+    User::Panic(aPanicCategory, aPanicCode); 
+    }
+
+inline void TraceLeave(char* aFile, TInt aLine, TInt aReason)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KLeavePrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName);
+    Trace(buf);
+    User::LeaveIfError(aReason);
+    }
+
+#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;}
+
+#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;}
+
+#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;}
+
+#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;}
+
+#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;}
+
+#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);}
+
+#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory)
+
+#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}}
+
+#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}}
+
+#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}}
+
+#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}}
+
+#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}}
+
+#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}}
+
+#define TRACE_ONLY(p) p
+
+#else // PRJ_ENABLE_TRACE not defined
+
+#define TRACE_INFO(p)
+
+#define TRACE_ERROR(p)
+
+#define TRACE_STATE(p)
+
+#define TRACE_WARNING(p)
+
+#define TRACE_INFO_SEG(p)
+
+#define TRACE_ASSERT(GUARD, CODE)
+
+#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);}
+
+#define LEAVE_IF_ERROR(REASON) {static_cast<void>(User::LeaveIfError(REASON));}
+
+#define LEAVE(REASON) {static_cast<void>(User::Leave(REASON));}
+
+#define TRACE_FUNC_ENTRY
+
+#define TRACE_FUNC_ENTRY_THIS
+
+#define TRACE_FUNC_EXIT
+
+#define TRACE_FUNC
+
+#define TRACE_FUNC_THIS
+
+#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;}
+
+#define TRACE_ONLY(p)
+
+#endif // PRJ_ENABLE_TRACE
+
+#endif // PRJ_LOGGING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/debugconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_DEBUGCONFIG_H
+#define OBEXSM_DEBUGCONFIG_H
+
+#include "prjconfig.h"
+
+
+/**
+ * Custom logging variations.
+ */
+#ifdef PRJ_FILE_TRACE
+_LIT(KLogFile,"bipreceiveservice.txt");
+_LIT(KLogDir,"locod");
+#endif
+
+#ifdef PRJ_ENABLE_TRACE
+_LIT(KTracePrefix16, "[BIP] ");
+_LIT8(KTracePrefix8, "[BIP] ");
+_LIT8(KFuncFormat8, "><%S");
+_LIT8(KFuncThisFormat8, "><%S, [0x%08X]");
+_LIT8(KFuncEntryFormat8, ">%S");
+_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]");
+_LIT8(KFuncExitFormat8, "<%S");
+
+_LIT(KPanicCategory, "BIP");    
+_LIT8(KPanicPrefix8, "PANIC code ");
+_LIT8(KLeavePrefix8, "LEAVE code ");
+#endif
+
+#endif // OBEXSM_DEBUGCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/inc/prjconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_PRJCONFIG_H
+#define OBEXSM_PRJCONFIG_H
+
+/**
+ * Traces are enabled via RDebug::Print() in UDEB build, by default.
+ */
+#ifdef _DEBUG
+#define PRJ_ENABLE_TRACE
+#endif
+
+/**
+ * Traces will be written to file if this is defined.
+ */
+//#define PRJ_FILE_TRACE
+
+
+/**
+ * build the project for module test purpose if this is defined
+ */
+//#define PRJ_MODULETEST_BUILD
+
+/**
+ * build the project using stubs to replace the dependencies if this is defined
+ */
+//#define PRJ_USE_STUB
+
+#endif // OBEXSM_PRJCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/src/BIPCapabilityHandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002 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:  Implementation of CBIPCapabilityHandler
+*
+*/
+
+
+// INCLUDE FILES
+#include "BIPCapabilityHandler.h"
+#include "BIPXMLWriter.h"
+#include <imageconversion.h>
+
+// CONSTANTS
+_LIT8( KBIPXmlImagePixel, "\" pixel=\"0*0-65535*65535\"");
+_LIT8( KBIPXmlImageMaxSize, " maxsize=\"50000000\"");
+
+const TInt KBIPMaxTypeLenght = 256;
+const TInt KBIPMaxAttrLength = 32;
+
+// MODULE DATA STRUCTURES
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBIPCapabilityHandler* CBIPCapabilityHandler::NewL()
+    {
+    TRACE_FUNC_ENTRY
+    CBIPCapabilityHandler* self = new ( ELeave ) CBIPCapabilityHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return( self );
+    }
+
+// ---------------------------------------------------------
+// CBIPCapabilityHandler()
+// ---------------------------------------------------------
+//
+CBIPCapabilityHandler::CBIPCapabilityHandler()
+    {
+    TRACE_FUNC_ENTRY
+    }
+
+// ---------------------------------------------------------
+// CreateCapabilityObjectL()
+// ---------------------------------------------------------
+//
+void CBIPCapabilityHandler::CreateCapabilityObjectL( TFileName& aFileName )
+    {
+    TRACE_FUNC_ENTRY
+    iBIPXmlWriter = CBIPXmlWriter::NewL();
+    iBIPXmlWriter->OpenXmlDocumentL( aFileName );
+    SupportedImageTypesL();
+    TBufC8<KBIPMaxAttrLength> pixelRange( KBIPXmlImagePixel );
+    TBufC8<KBIPMaxAttrLength> maxSize( KBIPXmlImageMaxSize );
+    TBufC8<KBIPMaxAttrLength> encoding;
+    for( TInt index = 0; index < iImageTypeArray->Count(); index++ )
+        {
+        encoding = iImageTypeArray->MdcaPoint( index );
+        iBIPXmlWriter->OpenXmlElementL( EImageFormats );
+        iBIPXmlWriter->AddXmlAttributeL( EEncoding, encoding );
+        iBIPXmlWriter->AddXmlAttributeL( EPixel, pixelRange );
+        iBIPXmlWriter->AddXmlAttributeL( EMaxSize, maxSize );
+        iBIPXmlWriter->CloseXmlElementL();
+        }
+    iBIPXmlWriter->CloseXmlDocumentL();
+    TRACE_FUNC_EXIT
+    }    
+
+// ---------------------------------------------------------
+// SupportedImageTypesL()
+// ---------------------------------------------------------
+//
+void CBIPCapabilityHandler::SupportedImageTypesL( )
+    {   
+    TRACE_FUNC_ENTRY
+    TInt retVal = KErrNone;
+	RFileExtensionMIMETypeArray theFileExtensionArray;
+	iImageTypeArray->Reset();
+
+    TRAP( retVal, CImageDecoder::GetFileTypesL( theFileExtensionArray ) );	
+	if( retVal != KErrNone )
+		{
+		theFileExtensionArray.ResetAndDestroy();
+        User::Leave( retVal );
+		}
+    
+    HBufC8* name = HBufC8::NewLC( KBIPMaxTypeLenght );
+	for( TInt index = 0; index < theFileExtensionArray.Count(); index++ )
+		{
+		CFileExtensionMIMEType& fileExtAndMIMEType = *theFileExtensionArray[index];
+        name->Des().Copy( fileExtAndMIMEType.DisplayName() );
+
+        TInt dummy;
+        retVal = iImageTypeArray->Find( name->Des(), dummy );
+        if( retVal != KErrNone )
+            {
+            iImageTypeArray->AppendL( name->Des() );
+            }
+        name->Des().Zero();
+        }
+    CleanupStack::PopAndDestroy(name);  
+
+	theFileExtensionArray.ResetAndDestroy();
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------
+//
+void CBIPCapabilityHandler::ConstructL()
+    {
+    TRACE_FUNC_ENTRY
+    iImageTypeArray = new (ELeave) CDesC8ArrayFlat(1);
+    }
+
+// ---------------------------------------------------------
+// ~CBIPCapabilityHandler()
+// ---------------------------------------------------------
+//
+CBIPCapabilityHandler::~CBIPCapabilityHandler()
+    {
+    TRACE_FUNC
+    delete iBIPXmlWriter;
+    delete iImageTypeArray;
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,895 @@
+/*
+* 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:  Obex Server image receiver module implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include    <avkon.hrh>                    // AVKON components
+#include    "BIPController.h"
+#include    "BIPCapabilityHandler.h"
+#include    "BIPImageHandler.h"
+
+
+#include    <e32base.h>
+#include    <StringLoader.h>               // Series 60 localisation stringloader
+#include    <obexutilsmessagehandler.h>
+#include    <obexutilsuilayer.h>
+#include    <obexutilsdialog.h>
+#include    <UiklafInternalCRKeys.h>
+#include    <Obexutils.rsg>
+#include    <sysutil.h>
+#include    <bautils.h>
+#include    <driveinfo.h>                   
+#include    <AknWaitDialog.h>
+#include    <btengdomaincrkeys.h> 
+#include    <e32math.h> 
+#include    <es_sock.h>
+#include    <bt_sock.h>
+#include    <msvids.h>
+#include    "debug.h"
+        
+// CONSTANTS
+_LIT8(KBipCapabilityType, "x-bt/img-capabilities\0");
+
+
+const TInt    KBufferSize = 0x10000;  // 64 kB
+
+// ================= MEMBER FUNCTIONS =======================
+
+CBIPController* CBIPController::NewL()
+    {
+    CBIPController* self = new ( ELeave ) CBIPController();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop(self); 
+	return self;
+    }
+    
+// ---------------------------------------------------------
+// CBIPController()
+// ---------------------------------------------------------
+//
+CBIPController::CBIPController()
+    {
+    }
+
+// ---------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------
+//
+void CBIPController::ConstructL()
+    {
+    TRACE_FUNC_ENTRY
+    iBIPImageHandler = CBIPImageHandler::NewL();
+    iLowMemoryActiveCDrive = CObexUtilsPropertyNotifier::NewL(this, ECheckPhoneMemory);
+    iLowMemoryActiveMMC = CObexUtilsPropertyNotifier::NewL(this, ECheckMMCMemory);
+    iDevMan = CBTEngDevMan::NewL(this);
+    iResultArray = new(ELeave) CBTDeviceArray(1);
+    // Get default folder from CenRep 
+    TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder, iCenRepFolder);
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// ~CBIPController()
+// ---------------------------------------------------------
+//
+CBIPController::~CBIPController()
+    {   
+    TRACE_FUNC_ENTRY    
+    delete iGetObject;    
+    delete iBIPCapabilityHandler;    
+    delete iBIPImageHandler;    
+    delete iLowMemoryActiveCDrive;    
+    delete iLowMemoryActiveMMC;    
+    delete iBuf;
+    delete iProgressDialog;
+    delete iWaitDialog;
+    delete iBTObject;
+    delete iDevMan;
+    if (iResultArray)
+        {
+        iResultArray->ResetAndDestroy();
+        delete iResultArray;
+        }
+    iFs.Close();
+    TRACE_FUNC_EXIT    
+    }
+
+// ---------------------------------------------------------
+// ErrorIndication()
+// ---------------------------------------------------------
+//
+void CBIPController::ErrorIndication(TInt TRACE_ONLY(aError))
+    {
+    TRACE_FUNC_ENTRY
+    TRACE_ERROR((_L("[obexreceiveservicebip] CBIPController: ErrorIndication error:\t %d"), aError));
+    HandleError(EFalse); // false because this is not an explicit abort
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// AbortIndication()
+// ---------------------------------------------------------
+//
+void CBIPController::AbortIndication()
+    {
+    TRACE_FUNC_ENTRY
+    HandleError(ETrue); // true because this is an explicit abort
+    TRACE_FUNC_EXIT
+    }
+
+void CBIPController::HandleError(TBool aAbort)
+    {
+    TRACE_FUNC_ENTRY
+    
+    if( iBTTransferState == ETransferPut || (!aAbort && iBTTransferState == ETransferPutDiskError) )
+        {
+        if(iBTObject)
+            {
+            iBTObject->Reset();
+            }
+        CancelTransfer();
+        TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL( R_BT_FAILED_TO_RECEIVE));
+        }
+    delete iBuf;
+    iBuf = NULL;
+    
+    iBTTransferState = ETransferIdle;
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveInboxEntriesL(iBTObject,iMsvIdParent));
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL(iFullPathFilename));
+    
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// CancelTransfer()
+// ---------------------------------------------------------
+//
+void CBIPController::CancelTransfer()
+    {
+    TRACE_FUNC_ENTRY
+    CloseReceivingIndicator();
+    if(iBTTransferState == ETransferPut)
+        {
+        iBTTransferState = ETransferPutCancel;
+        }
+    else // go to idle for all other states
+        {
+        iBTTransferState = ETransferIdle;
+        }
+    }
+// ---------------------------------------------------------
+// TransportUpIndication()
+// ---------------------------------------------------------
+//
+void CBIPController::TransportUpIndication()
+    {
+    TRACE_FUNC
+    if (!iFs.Handle())
+        {
+        TRACE_INFO( (_L( "[bipreceiveservice] TransportUpIndication iFs.Connect()" )) ); 
+        if (iFs.Connect())   // error value not checked, iFs.Handle() checked one more time before first useage
+            {
+            TRACE_INFO( (_L( "[bipreceiveservice] TransportUpIndication iFs.Connect() failed" )) ); 
+            }
+        }
+    
+    iFile = RFile();
+    iFullPathFilename.Zero();
+    iCapabilityFileName.Zero();
+    }
+
+// ---------------------------------------------------------
+// ObexConnectIndication()
+// ---------------------------------------------------------
+//
+TInt CBIPController::ObexConnectIndication( const TObexConnectInfo& /*aRemoteInfo*/, const TDesC8& /*aInfo*/ )
+    {
+    TRACE_FUNC
+    
+    // Get remote device socket address and bluetooth name
+    // Remote bluetooth name will be displayed in the new message in inbox.
+    //
+    TSockAddr addr;
+    iBTObexServer->RemoteAddr(addr);
+    TBTDevAddr tBTDevAddr = static_cast<TBTSockAddr>(addr).BTAddr();
+    
+    TBTRegistrySearch nameSearch;
+    nameSearch.FindAddress(tBTDevAddr);
+    
+    iResultArray->Reset();
+    // Ignore any errors here, if we don't get the name, we don't get the name.
+    // It is also possible that the name is received too late....
+    static_cast<void>(iDevMan->GetDevices(nameSearch, iResultArray));
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// ObexDisconnectIndication()
+// ---------------------------------------------------------
+//
+void CBIPController::ObexDisconnectIndication(const TDesC8& /*aInfo*/)
+    {
+    TRACE_FUNC
+    }
+
+// ---------------------------------------------------------
+// TransportDownIndication()
+// ---------------------------------------------------------
+//
+void CBIPController::TransportDownIndication()
+    {
+    TRACE_FUNC   
+    // Remove receiving buffer and files used during file receiving.
+    //
+    delete iBTObject;
+    iBTObject = NULL;
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL (iFullPathFilename));  
+    iFs.Close();
+    }
+
+// ---------------------------------------------------------
+// PutRequestIndication()
+// ---------------------------------------------------------
+//
+CObexBufObject* CBIPController::PutRequestIndication()
+    {   
+    TRACE_FUNC_ENTRY
+    iLengthHeaderReceived = EFalse; // New put request so clear header based state
+    iBTTransferState = ETransferPut;
+    
+    // Checking if backup is running now - if backup process is active, then we
+    // need to cancel transfer - otherwise phone will freeze during receiving
+    // data
+    if ( TObexUtilsUiLayer::IsBackupRunning() )
+        {
+        TRACE_INFO ( _L ("Backup in progress! Canceling incoming transfer."));
+        iBTTransferState = ETransferPutInitError;
+        return NULL;
+        }
+        
+    TRAPD(err, HandlePutImageRequestL());
+    if (err == KErrNone)
+        {
+        return iBTObject;
+        }
+    if (iBTTransferState != ETransferPutInitError)
+        {
+        iBTTransferState = ETransferPutDiskError;
+        }
+    TRACE_FUNC_EXIT
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// PutPacketIndication() 
+// ---------------------------------------------------------
+//
+TInt CBIPController::PutPacketIndication()
+    {
+    TRACE_FUNC_ENTRY
+    if(iBTTransferState == ETransferPutCancel)
+        {
+        // User cancelled the put request, so error the next packet to terminate the put request.
+        // BIP considers the Unauthorized error response suitable for this...
+        HandleError(ETrue); // reset state and clear up
+        return KErrIrObexRespUnauthorized;
+        }
+    
+    if (iBTObject)
+        {
+        iTotalSizeByte = iBTObject->Length();     // get size of receiving file
+        iReceivingFileName = iBTObject->Name();   // get name of receiving file
+        
+        // Check that capacity is suitable as soon as possible
+        if(!iLengthHeaderReceived && iTotalSizeByte > 0)
+            {
+            iLengthHeaderReceived = ETrue; // total size value is from length header
+            TBool capacity = ETrue;
+            TRAPD(retTrap, capacity = CheckCapacityL());
+            if(retTrap != KErrNone)
+                {
+                return KErrGeneral;
+                }
+            if(!capacity)
+                {
+                TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY));
+                return KErrDiskFull;
+                }
+            }
+        if(iBTObject->Name().Length() > KMaxFileName)
+            {
+            return KErrAccessDenied;
+            }
+        if(iBTTransferState == ETransferPutDiskError)
+            {
+            return KErrDiskFull;
+            }
+        // successfully received put packet if we reached here
+        iBTTransferState = ETransferPut;
+        
+        // Now we need to either create (in the first instance) or update the dialog on the UI.
+        if(ReceivingIndicatorActive())
+            {
+            UpdateReceivingIndicator();
+            }
+        else if(!iNoteDisplayed)
+            {
+            // No note launched yet, so try to launch
+            TRAPD(err, LaunchReceivingIndicatorL());
+            iNoteDisplayed = (err == KErrNone);
+            }
+        }
+    
+    TRACE_FUNC_EXIT
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// PutCompleteIndication() 
+// ---------------------------------------------------------
+//
+TInt CBIPController::PutCompleteIndication()  // Once receive has completed.
+    {
+    TRACE_FUNC_ENTRY
+    TInt retVal = KErrNone;
+    if(iBTTransferState == ETransferPutCancel)
+        {
+        retVal = KErrIrObexRespUnauthorized;
+        HandleError(ETrue);
+        }
+    else
+        {
+        retVal = HandlePutCompleteIndication();
+        iBTTransferState = ETransferIdle;
+        CloseReceivingIndicator();
+        }
+    TRACE_FUNC_EXIT
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// GetRequestIndication()
+// ---------------------------------------------------------
+//
+CObexBufObject* CBIPController::GetRequestIndication( CObexBaseObject* aRequiredObject )
+    {
+    TRACE_FUNC_ENTRY
+    iBTTransferState = ETransferGet;
+    TInt err = RemoveCapabilityObject();
+    if (err == KErrNone)
+        {
+        if( aRequiredObject->Type() == KBipCapabilityType )
+            {
+            TRAP( err, HandleGetCapabilityRequestL( ) );
+            if( err == KErrNone )
+                {
+                return iGetObject;
+                }
+            }
+        }
+    TRACE_FUNC_EXIT
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// GetPacketIndication()
+// ---------------------------------------------------------
+//
+TInt CBIPController::GetPacketIndication()
+    {
+    TRACE_FUNC_ENTRY
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// GetCompleteIndication()
+// ---------------------------------------------------------
+//
+TInt CBIPController::GetCompleteIndication()
+    {
+    TRACE_FUNC_ENTRY
+    delete iGetObject;
+    iGetObject=NULL;
+    TInt err = RemoveCapabilityObject();
+    if (err != KErrNone)
+        {
+        err = KErrGeneral;
+        }
+    iBTTransferState = ETransferIdle;
+    TRACE_FUNC_EXIT
+    return err;
+    }
+
+// ---------------------------------------------------------
+// SetPathIndication()
+// ---------------------------------------------------------
+//
+TInt CBIPController::SetPathIndication( const CObex::TSetPathInfo& /*aPathInfo*/, 
+                                        const TDesC8& /*aInfo*/)
+    {
+    TRACE_FUNC
+    // SetPath is not implemented in BIP - so following IrOBEX guidance, return
+    // the Forbidden response code.
+    return KErrIrObexRespForbidden;
+    }
+
+/**
+* This function is implementation for mixin-class for Obexutils.
+* It is called every time another instance modifies disk status,
+* for example when it cross warning/critical level.
+* Parameters:
+* @param aCheckType             Disktype changes.
+*/
+void CBIPController::HandleNotifyL(TMemoryPropertyCheckType aCheckType)
+    {    
+    TRACE_FUNC_ENTRY    
+    // Only interested on this notification if we are receiving something
+    if ( iBTTransferState == ETransferPut )
+        {
+       // Check the keys, what has been changed.
+       if ( aCheckType == ECheckPhoneMemory )
+           {
+           if ( SysUtil::FFSSpaceBelowCriticalLevelL( NULL, 0 ) )
+               {                
+               TRACE_INFO( _L( "[obexreceiveservicebip] CBIPController: Obex Server error diskfull:\t" ) );
+               iBTTransferState = ETransferPutDiskError;
+               }
+           }
+       else if ( aCheckType == ECheckMMCMemory )
+           {                
+           if ( SysUtil::MMCSpaceBelowCriticalLevelL( NULL, 0 ) )
+               {                    
+               TRACE_INFO( _L( "[obexreceiveservicebip] CBIPController: Obex Server error diskfull:\t" ) );
+               iBTTransferState = ETransferPutDiskError;
+               }
+           }            
+        }        
+    TRACE_FUNC_EXIT    
+    }
+    
+// ---------------------------------------------------------
+// HandleGetCapabilityRequestL()
+// ---------------------------------------------------------
+//
+void CBIPController::HandleGetCapabilityRequestL()
+    {
+    TRACE_FUNC_ENTRY    
+    CBIPCapabilityHandler* capHandler = CBIPCapabilityHandler::NewL();
+    CleanupStack::PushL(capHandler);
+    capHandler->CreateCapabilityObjectL(iCapabilityFileName);
+    delete iGetObject;
+    iGetObject = NULL; 
+    iGetObject = CObexBufObject::NewL(NULL);
+    iGetObject->SetDataBufL(iCapabilityFileName);
+    CleanupStack::PopAndDestroy(capHandler);
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// HandlePutImageRequest()
+// ---------------------------------------------------------
+//
+void CBIPController::HandlePutImageRequestL()
+    {
+    TRACE_FUNC_ENTRY
+    
+    delete iBTObject;
+    iBTObject = NULL;
+
+    if (!iFs.Handle())
+        {
+        User::Leave(KErrGeneral);
+        }
+    
+    // Assign an initial value to iDrive
+    iDrive = GetDriveWithMaximumFreeSpaceL();    
+    
+    // If iDrive is at critical space level, we immediately show out_of_memory.
+    //
+    if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, iDrive))
+        {
+        TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY));
+        User::Leave(KErrGeneral);
+        }
+    
+    iBTObject = CObexBufObject::NewL(NULL);    
+    
+    delete iBuf;
+    iBuf = NULL;
+    
+    TChar driveLetter;
+    iDefaultFolder.Zero();
+    iFs.DriveToChar(iDrive, driveLetter);
+    iDefaultFolder.Append(driveLetter);
+    if ( iDrive == EDriveC )
+        {
+        iDefaultFolder.Append(_L(":\\data\\"));
+        }
+    else
+        {
+        iDefaultFolder.Append(_L(":\\"));
+        }
+    
+    iDefaultFolder.Append(iCenRepFolder);
+    
+    iFile = RFile();
+    iFullPathFilename.Zero();
+    TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL(iFile, iDefaultFolder, iFullPathFilename, iBuf, KBufferSize);
+    User::LeaveIfError(iFile.Open(iFs, iFullPathFilename, EFileWrite));
+    TObexRFileBackedBuffer bufferdetails(*iBuf, iFile, CObexBufObject::EDoubleBuffering);
+    TRAPD(err, iBTObject->SetDataBufL(bufferdetails));
+    if (err != KErrNone)
+        {
+        iBTTransferState = ETransferPutInitError;
+        User::Leave(KErrGeneral); 
+        }
+        
+    TRACE_FUNC_EXIT
+    }
+
+
+// ---------------------------------------------------------
+// HandlePutCompleteIndication()
+// ---------------------------------------------------------
+//
+TInt CBIPController::HandlePutCompleteIndication()
+	{
+    TRACE_FUNC_ENTRY
+    TInt retVal = KErrNone;
+
+    iDefaultFolder.Zero();
+    TChar driveLetter;
+    if ( iDrive == EDriveC )
+        {
+        iFs.DriveToChar(iDrive, driveLetter);
+        iDefaultFolder.Append(driveLetter);
+        iDefaultFolder.Append(_L(":\\data\\"));
+        iDefaultFolder.Append(iCenRepFolder);
+        }
+    else
+        {
+        iFs.DriveToChar(iDrive, driveLetter);
+        iDefaultFolder.Append(driveLetter);
+        iDefaultFolder.Append(_L(":\\"));
+        iDefaultFolder.Append(iCenRepFolder);
+        }
+    
+    iFullPathFilename.Zero();
+    iFullPathFilename.Append(iDefaultFolder);
+    TRAP ( retVal, TObexUtilsMessageHandler::SaveFileToFileSystemL(iBTObject,
+                                                                   KUidMsgTypeBt,
+                                                                   iMsvIdParent,
+                                                                   iFullPathFilename,
+                                                                   iFile,
+                                                                   iRemoteDeviceName));
+    if ( retVal == KErrNone)
+        {
+        TRAP (retVal, TObexUtilsMessageHandler::AddEntryToInboxL(iMsvIdParent, iFullPathFilename));
+        }
+    
+    
+    if( retVal != KErrNone )
+        {
+        TRACE_ERROR((_L( "[obexreceiveservicebip] CBIPController: HandlePutCompleteIndication error:\t %d" ), retVal ) );              
+        TRAP( retVal, TObexUtilsMessageHandler::RemoveInboxEntriesL(iBTObject, iMsvIdParent));
+        retVal = KErrDiskFull;
+        }
+    // Even if the object saving fails we must return image handle with error code
+    TRAP_IGNORE( iBIPImageHandler->AddImageHandleHeaderL( iBTObexServer ) );            
+    TRACE_INFO( _L( "[obexreceiveservicebip] HandlePutCompleteIndication Done\t" ) );
+    delete iBTObject;
+    iBTObject = NULL;
+    delete iBuf;
+    iBuf = NULL;
+    iPreviousDefaultFolder = iDefaultFolder;  // save the last file path where file is successfully saved to file system.
+    iMsvIdParent = KMsvNullIndexEntryId;
+    TRACE_FUNC_EXIT     
+    return retVal;
+	}
+// ---------------------------------------------------------
+// RemoveCapabilityObject()
+// ---------------------------------------------------------
+//		
+TInt CBIPController::RemoveCapabilityObject()
+    {
+    TRACE_FUNC_ENTRY
+    if ( (iCapabilityFileName.Compare(KNullDesC)) == 0 )
+        {
+        return KErrNone; 
+        }     
+    if ( !iFs.Handle() )
+        {
+        TRACE_INFO( (_L( "[bipreceiveservice] RemoveCapabilityObject return" )) ); 
+        return KErrGeneral;
+        }               
+    iFs.Delete(iCapabilityFileName);        
+    iCapabilityFileName=KNullDesC; 
+    TRACE_FUNC_EXIT 
+    return KErrNone;    
+    }
+	 
+// ---------------------------------------------------------
+// CheckCapacity()
+// ---------------------------------------------------------
+//	    
+TBool CBIPController::CheckCapacityL()
+    {
+    TRACE_FUNC_ENTRY   
+    
+    iDrive = EDriveZ; // Intialize iDrive to Z
+    TInt filesize = iBTObject->Length();
+    
+    TInt mmcDrive = KDefaultDrive;   // External memory card  
+    TInt imsDrive = KDefaultDrive;   // Internal mass storage
+    
+    User::LeaveIfError(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, imsDrive));
+    User::LeaveIfError(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, mmcDrive));      
+     
+    TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL imsDrive=%d; mmcDrive=%d\t" ),imsDrive, mmcDrive ) );
+
+    TVolumeInfo volumeInfo;
+    TInt err = iFs.Volume(volumeInfo, imsDrive);
+    
+    // If err != KErrNone, Drive is not available.
+    //
+    if ( !err )
+        {
+        // Check capacity on Internal mass storage            
+        TRACE_INFO( (_L( "[obexreceiveservicebip] CheckCapacityL Internal mass storage \t" )) );
+        if ( !SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, filesize, imsDrive ) )
+            {
+            iDrive = imsDrive;            
+            }
+        }
+    if ( iDrive == EDriveZ )
+        {
+        err = iFs.Volume(volumeInfo, mmcDrive);
+        if ( !err )
+            {
+            // Check capacity on memory card    
+            TRACE_INFO( (_L( "[obexreceiveservicebip] CheckCapacityL Checking memory card\t" )) );
+            if ( !SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, filesize, mmcDrive ) )
+                {                    
+                iDrive = mmcDrive;
+                }   
+            }
+        }           
+    if ( iDrive == EDriveZ )
+        {
+        TRACE_INFO( (_L( "[obexreceiveservicebip] CheckCapacityL Checking phone memory\t" )) );
+        // Phone memory
+        if( !SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, filesize, EDriveC ))
+            {
+            iDrive = EDriveC;
+            }
+        }
+  
+    TRACE_INFO( (_L( "[obexreceiveservicebip] CheckCapacityL iDrive = %d\t" ),iDrive ) );                   
+    TRACE_FUNC_EXIT
+    
+    if (iDrive == EDriveZ)
+        {
+        // If there is no free space for receiving file, we need to set iPreviousDefaultFolder back to iDefaultFolder.
+        // In order to show the file receveing dialog correctly.
+        iDefaultFolder = iPreviousDefaultFolder;
+        return EFalse;
+        }
+    return ETrue;
+    }    
+
+
+// ---------------------------------------------------------
+// IsOBEXActive()
+// ---------------------------------------------------------
+//
+TBool CBIPController::IsOBEXActive()
+    {    
+    TRACE_FUNC    
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// SetMediaType()
+// ---------------------------------------------------------
+//
+void CBIPController::SetMediaType( TSrcsMediaType __DEBUG_ONLY(aMediaType) ) 
+    {
+    TRACE_FUNC
+    // BIP is only for Bluetooth, so that is all we expect
+    __ASSERT_DEBUG(aMediaType == ESrcsMediaBT, User::Panic(KBipPanicCategory, EBipPanicNotBluetoothMediaType));
+    }
+
+// ---------------------------------------------------------
+// SetObexServer()
+// ---------------------------------------------------------
+//
+TInt CBIPController::SetObexServer( CObexServer* aServer)
+    {
+    TInt retVal=KErrNone;
+    if (aServer)
+        {
+        iBTObexServer=aServer;
+        retVal=aServer->Start(this);
+        }
+    return retVal;
+    }    
+
+void CBIPController::LaunchReceivingIndicatorL()
+    {
+    if(ReceivingIndicatorActive())
+        {
+        return;
+        }
+    
+    if(iTotalSizeByte > 0)
+        {
+        iProgressDialog = CGlobalProgressDialog::NewL(this);  
+        if(iReceivingFileName.Length() > 0)
+            {
+            iProgressDialog->ShowProgressDialogNameSizeL(iReceivingFileName, iTotalSizeByte);
+            }
+        else
+            {
+            iProgressDialog->ShowProgressDialogL(R_BT_RECEIVING_DATA);
+            }
+        }
+    else
+        {
+        iWaitDialog = CGlobalDialog::NewL(this);
+        iWaitDialog->ShowNoteDialogL(R_BT_RECEIVING_DATA, ETrue);
+        }
+    }
+
+void CBIPController::UpdateReceivingIndicator()
+    {
+    if(iProgressDialog)
+        {
+        iProgressDialog->UpdateProgressDialog(iBTObject->BytesReceived(), iTotalSizeByte);
+        }
+    // else we are using a wait note, so no "need" to update
+    }
+
+void CBIPController::HandleGlobalProgressDialogL( TInt aSoftkey )
+    {
+    TRACE_FUNC
+    
+    if(aSoftkey == EAknSoftkeyCancel)
+        {
+        CancelTransfer();
+        }
+    else if(aSoftkey == EAknSoftkeyHide)
+        {
+        CloseReceivingIndicator(EFalse); // Don't reset state as only hiding
+        }
+    }
+
+void CBIPController::HandleGlobalNoteDialogL( TInt aSoftkey )
+    {
+    TRACE_FUNC
+    
+    if( aSoftkey == EAknSoftkeyCancel )
+        {
+        CancelTransfer();
+        }
+    else if( aSoftkey == EAknSoftkeyHide)
+        {
+        CloseReceivingIndicator(EFalse); // Don't reset state as only hiding
+        }
+    }
+
+void CBIPController::CloseReceivingIndicator(TBool aResetDisplayedState)
+    {
+    TRACE_FUNC
+    if(aResetDisplayedState)
+        {
+        iNoteDisplayed = EFalse;
+        }
+    if(iProgressDialog)
+        {
+        iProgressDialog->ProcessFinished();
+        delete iProgressDialog;
+        iProgressDialog = NULL;
+        }
+    if(iWaitDialog)
+        {
+        iWaitDialog->ProcessFinished();
+        delete iWaitDialog;
+        iWaitDialog = NULL;
+        }
+    }
+ 
+ // ---------------------------------------------------------
+ // GetDriveWithMaximumFreeSpace()
+ // ---------------------------------------------------------
+ // 
+ TInt CBIPController::GetDriveWithMaximumFreeSpaceL()
+     {
+     // Get drive with maximum freespace among phone memory, MMC, internal mass storage.
+     //
+      TRACE_FUNC   
+     
+     TVolumeInfo volumeInfoC;
+     TVolumeInfo volumeInfoE;
+     TVolumeInfo volumeInfoF;
+     TInt64 max = 0;
+     TInt drive = 0;
+     
+     TInt err = iFs.Volume(volumeInfoC, EDriveC);
+    
+     if ( !err )
+         {
+         // set initial values to max and drive.
+         max = volumeInfoC.iFree;
+         drive = EDriveC;
+         }
+          
+     err = iFs.Volume(volumeInfoE, EDriveE);     
+     if ( !err )
+         {
+         if (volumeInfoE.iFree >= max)
+             {
+             max = volumeInfoE.iFree;
+             drive = EDriveE;             
+             }
+         
+         }
+          
+     err = iFs.Volume(volumeInfoF, EDriveF);
+     if ( !err )
+         {
+         if (volumeInfoF.iFree >= max)
+             {
+             max = volumeInfoF.iFree;
+             drive = EDriveF;             
+             }
+         }
+     max = 0;
+     return drive;
+     }
+ 
+ // ----------------------------------------------------------
+ // COPPController::HandleDevManComplete
+ // Callback from devman
+ // ----------------------------------------------------------
+ //    
+ // 
+ void CBIPController::HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* /*aDeviceArray*/)
+    {
+    if ( aErr == KErrNone )
+        {
+        if ( iResultArray->Count())
+            {
+            iRemoteDeviceName.Zero();
+            if ( iResultArray->At(0)->FriendlyName().Length() > 0 )
+                {
+                TRACE_INFO( _L( "[CBIPController] HandleGetDevicesComplete: got friendly name \t" ) );
+                iRemoteDeviceName.Copy(iResultArray->At(0)->FriendlyName());
+                }
+            else
+                {
+                TRACE_INFO( _L( "[CBIPController] HandleGetDevicesComplete: got devciename name \t" ) );                
+                TRAP_IGNORE(iRemoteDeviceName.Copy(BTDeviceNameConverter::ToUnicodeL(iResultArray->At(0)->DeviceName())));
+                }
+            }
+        }
+    }
+ 
+//////////////////////////// Global part ////////////////////////////
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/src/BIPImageHandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2004 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:  Implementation of CBIPImageHandler class
+*
+*/
+
+
+#define __OBEX_USER_DEFINED_HEADERS__
+
+// INCLUDE FILES
+#include "BIPImageHandler.h"
+#include <obexheaders.h>
+
+const TInt KImageHandleWidth=7;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// AddImageHandleHeaderL()
+// ---------------------------------------------------------
+//
+void CBIPImageHandler::AddImageHandleHeaderL( CObexServer* aObexServer )
+    {
+    TRACE_FUNC_ENTRY    
+    
+    CObexHeaderSet* currentHeaders = CObexHeaderSet::NewL();
+    CleanupStack::PushL( currentHeaders );  // 1. push
+        
+    CObexHeader* header = CObexHeader::NewL();
+    CleanupStack::PushL( header ); //2. push
+
+    TBuf16<KImageHandleWidth> imageHandle;
+    iImageHandleValue++;
+    imageHandle.AppendNumFixedWidth( iImageHandleValue, EDecimal, KImageHandleWidth ); 
+    header->SetUnicodeL( 0x30, imageHandle );
+
+    User::LeaveIfError( currentHeaders->AddHeader( header ) );
+    
+    CleanupStack::Pop( header); 
+    if( aObexServer )
+        {
+        TRACE_INFO( _L( "[MtmUiServerBip] CBIPImageHandler: SetPutFinalResponseHeaders \t" ) );
+        User::LeaveIfError( aObexServer->SetPutFinalResponseHeaders( currentHeaders ) );
+        CleanupStack::Pop( currentHeaders);     
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(currentHeaders);    
+        }
+    
+    TRACE_FUNC_ENTRY    
+    }
+
+// ---------------------------------------------------------
+// CBIPImageHandler()
+// ---------------------------------------------------------
+//
+CBIPImageHandler::CBIPImageHandler()
+    {
+    }
+
+// ---------------------------------------------------------
+// ~CBIPImageHandler()
+// ---------------------------------------------------------
+//
+CBIPImageHandler::~CBIPImageHandler()
+    {
+    TRACE_FUNC_ENTRY    
+    }
+// ---------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------
+//
+void CBIPImageHandler::ConstructL()
+    {
+    TRACE_FUNC
+    iImageHandleValue = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBIPImageHandler* CBIPImageHandler::NewL()
+    {
+    TRACE_FUNC_ENTRY
+    CBIPImageHandler* self = new ( ELeave ) CBIPImageHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return( self );
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/src/BIPXMLWriter.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2002 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:  Implementation of CBIPXMLWriter class
+*
+*/
+
+
+// INCLUDE FILES
+#include "BIPXMLWriter.h"
+#include <obexutilsmessagehandler.h>
+
+
+// CONSTANTS
+_LIT8( KBIPXmlDocBegin," <imaging-capabilities version=\"1.0\">" );
+_LIT8( KBIPXmlDocEnd, "</imaging-capabilities>" );
+_LIT8( KBIPXmlImageFormatsBegin, "<image-formats encoding=\"" );
+_LIT8( KBIPXmlImageFormatsEnd, "/>");
+_LIT8( KBIPImageTypes, "JPEGBMPGIFWBMPPNGJPEG2000" );
+_LIT8( KBIPUserSeries60, "USR-SERIES60-" );
+
+const TInt KBIPImageTypesLength     = 30;
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBIPXmlWriter* CBIPXmlWriter::NewL()
+    {
+    TRACE_FUNC
+    CBIPXmlWriter* self = new ( ELeave ) CBIPXmlWriter();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return( self );
+    }
+
+// ---------------------------------------------------------
+// CBIPXmlWriter()
+// ---------------------------------------------------------
+//
+CBIPXmlWriter::CBIPXmlWriter()
+    {
+    }
+
+// ---------------------------------------------------------
+// OpenXmlDocumentL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::OpenXmlDocumentL( TFileName& aFileName )
+    {
+    TRACE_FUNC
+    User::LeaveIfError( iFileSession.Connect() );    
+    TPath tempPath;        
+    TInt drive = TObexUtilsMessageHandler::GetMessageCentreDriveL();    
+    TDriveUnit driveString (drive);
+    User::LeaveIfError(iFileSession.CreatePrivatePath( drive ));
+    User::LeaveIfError(iFileSession.PrivatePath(tempPath));                    
+	User::LeaveIfError(ifile.Temp( iFileSession, tempPath, aFileName, EFileWrite ));   
+    User::LeaveIfError( ifile.Write( KBIPXmlDocBegin ) );
+    }
+
+// ---------------------------------------------------------
+// CloseXmlDocumentL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::CloseXmlDocumentL()
+    {
+    TRACE_FUNC
+    User::LeaveIfError( ifile.Write( KBIPXmlDocEnd ) );
+    User::LeaveIfError( ifile.Flush() );
+    ifile.Close();
+    iFileSession.Close();
+    }
+
+// ---------------------------------------------------------
+// OpenXmlElementL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::OpenXmlElementL( TElementType aElement )
+    {
+    switch( aElement )
+        {
+        case EImageFormats:
+            {
+            User::LeaveIfError( ifile.Write( KBIPXmlImageFormatsBegin ) );
+            break;
+            }
+        case EPreferredFormat:
+            {
+            break;
+            }
+        case EAttachmentFormats:
+            {
+            break;
+            }
+        case EFilteringParameters:
+            {
+            break;
+            }
+        case EDPOFOptions:
+            {
+            break;
+            }
+        default:
+            {
+            }
+        }
+    TRACE_FUNC
+    }
+
+// ---------------------------------------------------------
+// AddXmlAttributeL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::AddXmlAttributeL( TAttributeType aAttributeType, TDesC8& aAttr )
+    {
+    TRACE_FUNC_ENTRY    
+    TBuf8<KBIPImageTypesLength> attribute = KBIPImageTypes();
+    switch( aAttributeType )
+        {
+        case EEncoding:
+            {
+            if( attribute.Find( aAttr ) == KErrNotFound )
+                {
+                User::LeaveIfError( ifile.Write( KBIPUserSeries60 ) );
+                User::LeaveIfError( ifile.Write( aAttr ) );
+                
+                }
+            else
+                {
+                User::LeaveIfError( ifile.Write( aAttr ) );
+                }
+            break;
+            }
+        case EPixel:
+            {
+            User::LeaveIfError( ifile.Write( aAttr ) );
+            break;
+            }
+        case EMaxSize:
+            {
+            User::LeaveIfError( ifile.Write( aAttr ) );
+            break;
+            }
+        case ETransformation:
+            {
+            break;
+            }
+        default:
+            {
+            }
+        }
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// CloseXmlElementL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::CloseXmlElementL()
+    {
+    TRACE_FUNC
+    User::LeaveIfError( ifile.Write( KBIPXmlImageFormatsEnd ) );
+    }
+
+// ---------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------
+//
+void CBIPXmlWriter::ConstructL()
+    {
+    TRACE_FUNC
+    }
+
+// ---------------------------------------------------------
+// ~CBIPXmlWriter()
+// ---------------------------------------------------------
+//
+CBIPXmlWriter::~CBIPXmlWriter()
+    {
+    TRACE_FUNC
+    ifile.Close();
+    iFileSession.Close();
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/bip/src/obexservicebip.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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:  Export ECom interface implementations
+*
+*/
+
+
+#include <ecom/implementationproxy.h>
+#include "BIPController.h"
+
+// ---------------------------------------------------------------------------
+// An array of TImplementationProxy objects which onnect each 
+// implemeation with its instantiation function
+// ---------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x101F8671, CBIPController::NewL)
+    };
+
+// ---------------------------------------------------------------------------
+// Exported proxy function to resolve instantiation methods for an Ecom plug-in DLL
+// ---------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable; 
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a obexreceiveservices.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+
+../rom/mtmuibluetooth.iby                   CORE_MW_LAYER_IBY_EXPORT_PATH(mtmuibluetooth.iby)
+../rom/mtmuiinfrared.iby                    CORE_MW_LAYER_IBY_EXPORT_PATH(mtmuiinfrared.iby)
+../rom/obexservicebip.iby                   CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicebip.iby)
+../rom/obexserviceopp.iby                   CORE_MW_LAYER_IBY_EXPORT_PATH(obexserviceopp.iby)
+../rom/mtmuibluetoothresources.iby          LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(mtmuibluetoothresources.iby)
+../rom/mtmuiinfraredResources.iby           LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(mtmuiinfraredResources.iby)
+
+#include "../mtmuibluetooth/group/bld.inf"
+#include "../mtmuiinfrared/group/bld.inf"
+#include "../opp/group/bld.inf"
+#include "../bip/group/bld.inf"
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/bmarm/BTMTMUIU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	NewBtMtmUiDataLayerL__FR17CRegisteredMtmDll @ 1 NONAME R3UNUSED ; NewBtMtmUiDataLayerL(CRegisteredMtmDll &)
+	NewBtMtmUiL__FR8CBaseMtmR17CRegisteredMtmDll @ 2 NONAME R3UNUSED ; NewBtMtmUiL(CBaseMtm &, CRegisteredMtmDll &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/bwins/BTMTMUIU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewBtMtmUiDataLayerL@@YAPAVCBaseMtmUiData@@AAVCRegisteredMtmDll@@@Z @ 1 NONAME ; class CBaseMtmUiData * __cdecl NewBtMtmUiDataLayerL(class CRegisteredMtmDll &)
+	?NewBtMtmUiL@@YAPAVCBaseMtmUi@@AAVCBaseMtm@@AAVCRegisteredMtmDll@@@Z @ 2 NONAME ; class CBaseMtmUi * __cdecl NewBtMtmUiL(class CBaseMtm &,class CRegisteredMtmDll &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/data/btmtmui.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains btmtmui resource. Entry points to Mtm.
+*     
+*
+*/
+
+
+//  INCLUDES
+#include <mtmconfig.rh>
+#include <avkon.loc>
+
+//  RESOURCE DEFINITIONS 
+// ---------------------------------------------------------
+//   
+//    
+//    MTM info resource for Bt
+//
+// ---------------------------------------------------------
+//
+
+
+
+#include <e32capability.h>
+
+RESOURCE MTM_INFO_FILE
+ 	{
+ 	mtm_type_uid = 0x10009ED5;
+ 	technology_type_uid = 0x10009ED6;
+ 	components = 
+ 		{
+ 		MTM_COMPONENT_V2
+ 			{
+ 			human_readable_name = qtn_query_send_via_bt;
+ 			component_uid = KUidMtmServerComponentVal;
+ 			entry_point = 1;
+ 			version = VERSION_V2 {};
+ 			filename = "BtsMtm.dll";
+ 			},
+ 		MTM_COMPONENT_V2
+ 			{
+ 			human_readable_name = qtn_query_send_via_bt;
+ 			component_uid = KUidMtmClientComponentVal;
+ 			entry_point = 1;
+ 			version = VERSION_V2 {};
+ 			filename = "BtcMtm.dll";
+ 			},
+ 		MTM_COMPONENT_V2
+ 			{
+ 			human_readable_name = qtn_query_send_via_bt;
+ 			component_uid = KUidMtmUiComponentVal;
+ 			entry_point = 2;
+ 			version = VERSION_V2 {};
+ 			filename = "BtMtmUi.dll";
+ 			},
+ 		MTM_COMPONENT_V2
+ 			{
+ 			human_readable_name = qtn_query_send_via_bt;
+ 			component_uid = KUidMtmUiDataComponentVal;
+ 			entry_point = 1;
+ 			version = VERSION_V2 {};
+ 			filename = "BtMtmUi.dll";
+ 			}
+ 		};
+ 	}
+
+
+RESOURCE MTM_CAPABILITIES
+    {
+    send_capability = 1; 
+    body_capability = 1; 
+    }
+
+RESOURCE MTM_SECURITY_CAPABILITY_SET
+    {
+    capabilities = { ECapabilityLocalServices };
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/eabi/btmtmuiU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,8 @@
+EXPORTS
+	_Z20NewBtMtmUiDataLayerLR17CRegisteredMtmDll @ 1 NONAME
+	_Z11NewBtMtmUiLR8CBaseMtmR17CRegisteredMtmDll @ 2 NONAME	
+	_ZTI12CBtMtmUiData @ 3 NONAME ; #<TI>#
+	_ZTI8CBtMtmUi @ 4 NONAME ; #<TI>#
+	_ZTV12CBtMtmUiData @ 5 NONAME ; #<VT>#
+	_ZTV8CBtMtmUi @ 6 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/group/BtRegistry.mk	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,74 @@
+#
+# 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:
+#
+# Build resource files
+#
+
+SOURCEDIR=..\group
+LANGUAGE=sc
+
+#
+# Target directory
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+TARGETDIR=$(EPOCROOT)Epoc32\Release\$(PLATFORM)\$(CFG)\Z\System\Mtm
+else
+TARGETDIR=$(EPOCROOT)Epoc32\Data\Z\System\Mtm
+endif
+
+$(TARGETDIR) :
+	@perl $(EPOCROOT)epoc32\tools\emkdir.pl $(TARGETDIR)
+
+#
+# Build the mtm resource files
+#
+
+PROJECT=BTMTMU
+SOURCERESOURCE=$(SOURCEDIR)\$(PROJECT)Registry.rss
+TARGETRESOURCE=$(TARGETDIR)\$(PROJECT).r$(LANGUAGE)
+$(TARGETRESOURCE) : $(TARGETDIR) $(SOURCERESOURCE)
+	@copy $(SOURCERESOURCE) $(TARGETDIR)\$(PROJECT).rss
+	@epocrc.bat -u -I. -I%EPOCROOT%s60\btmtmui\group -I%EPOCROOT%epoc32\include $(TARGETDIR)\$(PROJECT).rss -o$(TARGETRESOURCE)
+	@del $(TARGETDIR)\$(PROJECT).rss
+
+do_nothing:
+	rem do nothing
+
+#
+# The targets invoked by abld 
+#
+
+MAKMAKE : do_nothing
+
+RESOURCE : $(TARGETRESOURCE)
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN : 
+	@erase $(TARGETRESOURCE)
+
+RELEASABLES : 
+	@echo $(TARGETRESOURCE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a BTMTMUI.
+*
+*/
+
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+../group/btmtmui.mmp
+
+
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/group/btmtmui.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2002 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: 
+*    This is project specification file for the BtMtmUi.
+*     
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          btmtmui.dll
+TARGETTYPE      dll
+TARGETPATH 			SHARED_LIB_DIR 
+UID             0x10004845 0x101F8634
+CAPABILITY      CAP_GENERAL_DLL
+VENDORID 				VID_DEFAULT
+
+SOURCEPATH	    ../data
+START RESOURCE btmtmui.rss
+TARGETPATH MTM_INFO_FILE_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+SOURCEPATH      ../src
+USERINCLUDE     ../inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  
+#ifdef NO101APPDEPFIXES
+APP_LAYER_SYSTEMINCLUDE
+#else   //NO101APPDEPFIXES
+MW_LAYER_SYSTEMINCLUDE
+#endif  //NO101APPDEPFIXES
+
+SOURCE          btmtmuidll.cpp 
+SOURCE          btmtmuidata.cpp 
+SOURCE          btmtmui.cpp
+
+LIBRARY         obexutils.lib
+LIBRARY         euser.lib
+LIBRARY         msgs.lib
+LIBRARY         mtur.lib
+#ifdef NO101APPDEPFIXES
+LIBRARY         muiu.lib
+#endif  //NO101APPDEPFIXES
+LIBRARY         bluetooth.lib
+LIBRARY         btdevice.lib
+LIBRARY         btengdiscovery.lib
+DEBUGLIBRARY	flogger.lib
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmui.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,448 @@
+/*
+* Copyright (c) 2002 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: 
+*     Contains Bluetooth MTM Ui part.
+*     
+*
+*/
+
+
+#ifndef CBTMTMUI_H
+#define CBTMTMUI_H
+
+//  INCLUDES
+#include <btdevice.h>
+#include <mtmuibas.h>
+#include <btengdiscovery.h>
+
+#include <obexutilsuilayer.h>
+
+const TUint KBTSdpObjectPush            = 0x1105;
+
+// FORWARD DECLARATIONS
+class CClientMtmRegistry;
+
+/**
+*  CBtMtmUi
+*  Bluetooth messaging UI Module.
+*/
+class CBtMtmUi : public CBaseMtmUi, public MBTEngSdpResultReceiver
+	{
+    public: // Constructors and destructor
+       /**
+       * Two-phased constructor.
+       */
+	   static CBtMtmUi* NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll );
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CBtMtmUi();
+
+
+    public: // Functions from base classes
+
+        /**
+        * From CBaseMtmUi Entry Creation.
+        * @param aEntry reference to entry
+        * @param aParent parent entry
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* CreateL(
+            const TMsvEntry& aEntry, 
+            CMsvEntry& aParent, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Open entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* OpenL( TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Close entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* CloseL( TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Launches editor/settings dialog as appropriate. 
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* EditL( TRequestStatus& aStatus ); 
+	
+        /**
+        * From CBaseMtmUi Launches viewer/settings dialog as appropriate
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ViewL( TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Deletes selection from current context
+	    * Deletes entries from the current context, 
+        * which must be a folder or service of the relevant MTM  
+        * @param aSelection reference to entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* DeleteFromL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Deletes service, which need not 
+        * be the current context.
+        * @param aService reference to entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* DeleteServiceL(
+            const TMsvEntry& aService, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Remove remaining message of deleted service. 
+        * @param aChildren reference to entry selection.
+        * @return None.
+        */
+	    void DeleteRecursivelyL( CMsvEntrySelection& aChildren );
+	
+        //
+	    // --- Message responding ---
+	    // --- Default implementation calls CBaseMtm::ReplyL() or ForwardL(), 
+        //     followed by EditL() ---
+        // --- Takes ownership of the passed entry 
+        //     (which the context is switched to) ---
+
+        /**
+        * From CBaseMtmUi Reply entry
+        * @param aDestination id for msv.
+        * @param aPartlist partlist id.
+        * @param aCompletionStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ReplyL(
+            TMsvId aDestination, 
+            TMsvPartList aPartlist, 
+            TRequestStatus& aCompletionStatus );
+	
+
+        /**
+        * From CBaseMtmUi forward entry
+        * @param aDestination id for msv.
+        * @param aPartlist partlist id.
+        * @param aCompletionStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ForwardL(
+            TMsvId aDestination, 
+            TMsvPartList aPartList, 
+            TRequestStatus& aCompletionStatus );
+
+	    //
+	    // Actions upon message selections ---
+	    // Selections must be in same folder and all of the correct MTM type
+	    // Context may change after calling these functions
+
+        /**
+        * From CBaseMtmUi Open entry
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* OpenL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection ); 
+
+        /**
+        * From CBaseMtmUi Close entry
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CloseL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection ); 
+
+        /**
+        * From CBaseMtmUi Handles sending.
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* EditL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+
+        /**
+        * From CBaseMtmUi Launches viewer/settings dialog as appropriate
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ViewL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+
+        //
+        // Copy and move functions:
+        // Context should be set to folder or entry of this MTM 
+        // Default implementations imply call the relevant CMsvEntry functions
+	
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to copy to
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CopyToL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to Move to
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* MoveToL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to copy from
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CopyFromL(
+            const CMsvEntrySelection& aSelection, 
+            TMsvId aTargetId, 
+            TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to move from
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* MoveFromL(
+            const CMsvEntrySelection& aSelection, 
+            TMsvId aTargetId, 
+            TRequestStatus& aStatus );
+	
+	    // Interpret transfer progress 
+
+        /**
+        * From CBaseMtmUi Display progress summary.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        TInt DisplayProgressSummary( const TDesC8& aProgress ) const;
+
+        /**
+        * From CBaseMtmUi return progress status.
+        * @param aProgress reference to progress packet.
+        * @param aReturnString returned progress text.
+        * @param aTotalEntryCount entry count.
+        * @param aEntriesDone completed entries.
+        * @param aCurrentEntrySize size of the entry.
+        * @param aCurrentBytesTrans transferred bytes.
+        * @return TInt error code.
+        */
+        virtual TInt GetProgress(
+            const TDesC8& aProgress, 
+            TBuf<EProgressStringMaxLen>& aReturnString, 
+            TInt& aTotalEntryCount, 
+            TInt& aEntriesDone,
+		    TInt& aCurrentEntrySize, 
+            TInt& aCurrentBytesTrans ) const;
+	
+        //	
+        // --- RTTI functions ---
+
+        /**
+        * From CBaseMtmUi Return capability.
+        * @param aCapability UID for capability.
+        * @return TInt error code.
+        */
+        virtual TInt QueryCapability( TUid aCapability, TInt& aResponse );
+
+        /**
+        * From CBaseMtmUi Synchronous MTM function operation.
+        * @param aFunctionId Function ID.
+        * @param CMsvEntrySelection entry reference.
+        * @param aParam parameter for function.
+        * @return None.
+        */
+        virtual void InvokeSyncFunctionL(
+            TInt aFunctionId, 
+            const CMsvEntrySelection& aSelection, 
+            TDes8& aParameter );
+
+        /**
+        * From CBaseMtmUi Cancel sending.
+        * @param aStatus Async status for operation.
+        * @param CMsvEntrySelection entry reference.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CancelL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+            
+            
+         /**
+        * Provides notification of the result of a service search that matches 
+        * the requested UUID (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method indicates that the search has completed, and returns 
+        * all the results to the caller at once.
+        *
+        * @since S60 v3.2
+        * @param aResult Array of record handles that match the requested UUID.
+        *                Note: the array will not be available anymore after 
+        *                this method returns.
+        * @param aTotalRecordsCount The total number of records returned.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful, KErrEof if no record matched the requested UUID, 
+        *             KErrCouldNotConnect and KErrCouldDisconnected in case of 
+        *             Bluetooth connection errors; otherwise one of the 
+        *             system-wide error codes.
+        */
+        void ServiceSearchComplete( const RSdpRecHandleArray& aResult, 
+                                    TUint aTotalRecordsCount, TInt aErr );
+
+        /**
+        * Provides notification of the result of an attribute search that matches 
+        * the requested attribute (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method indicates that the search has completed, and returns 
+        * all the results to the caller at once.
+        *
+        * @since S60 v3.2
+        * @param aHandle Record handle of the service record containing the result.
+        * @param aAttr Array containing the attribute that matches the 
+        *              requested attribute.
+        *              Note: the array will not be available anymore after 
+        *              this method returns.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful, KErrEof if the requested attribute was not 
+        *             contained in the specified service record, 
+        *             KErrCouldNotConnect and KErrCouldDisconnected in case of 
+        *             Bluetooth connection errors; otherwise one of the 
+        *             system-wide error codes.
+        */
+        void AttributeSearchComplete( TSdpServRecordHandle aHandle, 
+                                           const RSdpResultArray& aAttr, 
+                                           TInt aErr );
+
+        /**
+        * Provides notification of the result of an combination of a service 
+        * and attribute search (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method is called for each service and attribute combination for 
+        * which a match was found. The last result (which could be empty if no 
+        * match was found) contain error code KErrEof to indicate that the 
+        * search has completed.
+        *
+        * @since S60 v3.2
+        * @param aHandle Record handle of the service record containing the result.
+        * @param aAttr Array containing the attribute that matches the 
+        *              requested attribute.
+        *              Note: the array will not be available anymore after 
+        *              this method returns.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful and more results follow, KErrEof indicates that 
+        *             this is the last result (which could be empty if no match 
+        *             was found), KErrCouldNotConnect and KErrCouldDisconnected 
+        *             in case of Bluetooth connection errors; otherwise one of 
+        *             the system-wide error codes.
+        */
+        void ServiceAttributeSearchComplete( TSdpServRecordHandle aHandle, 
+                                                      const RSdpResultArray& aAttr, 
+                                                      TInt aErr );
+
+        /**
+        * Provides notification of the result of the discovery of nearby 
+        * Bluetooth devices.
+        *
+        * @since S60 v3.2
+        * @param aDevice The data structure encapsulates all information 
+        *                about the selected device. Ownership of the data 
+        *                structure has not been transfered and is still with
+        *                the API client.
+        * @param aErr Error code of the device search operation; KErrNone if 
+        *             sucessful, KErrCancel if the user cancelled the 
+        *             dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice
+        *             was called; otherwise one of the system-wide error codes.
+        */
+        void DeviceSearchComplete( CBTDevice* aDevice, TInt aErr );    
+
+    protected:
+
+        /**
+        * C++ default constructor.
+        */ 
+        CBtMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll );
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+    protected: // Functions from base classes
+
+        /**
+        * From CBaseMtmUi return resource filename.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        void GetResourceFileName( TFileName& aFileName ) const;
+
+        /**
+        * From CBaseMtmUi Launch viewer for received message.
+        * @param aStatus Async status for operation.
+        * @param aSession session reference.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        CMsvOperation*	LaunchEditorApplicationL(
+            TRequestStatus& aStatus, 
+            CMsvSession& aSession );
+
+    protected:  // New functions
+
+        /**
+        * Register MTM.
+        * @param aMtmType MTM UID.
+        * @return CBaseMtm pointer.
+        */
+        CBaseMtm* GetClientMtmLC( TUid aMtmType );
+
+        /**
+        * Display progress summary.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        TInt DisplayProgressSummaryL( const TDesC8& aProgress ) const;
+ 
+    protected: // data
+
+        CClientMtmRegistry*		iClientRegistry;    // pointer to registration.
+
+    private:
+        TBTDeviceName        iBTDeviceName;                        // Bluetooth device name.
+        CBTDevice*           iDevice;
+        CBTEngDiscovery*     iDiscovery;
+        CActiveSchedulerWait iWaiter;
+        TInt                 iClientChannel;
+        TInt                 iState;  
+        
+	};
+
+#endif      // CBTMTMUI_H  
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmuidata.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2002 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: 
+*     Bluetooth Mtm Ui data part.
+*
+*
+*/
+
+
+#ifndef CBTMTMUIDATA_H
+#define CBTMTMUIDATA_H
+
+//  INCLUDES
+#include <mtudcbas.h>
+#include <obexutilsuilayer.h>
+
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATION
+
+/**
+*  CBtMtmUiData -
+*  contains Bluetooth specific MTM UI data.
+*/
+class CBtMtmUiData : public CBaseMtmUiData
+	{
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBtMtmUiData* NewL(CRegisteredMtmDll& aRegisteredDll);
+	
+        /**
+        * Destructor.
+        */
+        virtual ~CBtMtmUiData();
+
+        /**
+        * Constructor
+        */
+        void ConstructL();
+
+    public: // Functions from base classes
+
+        /**
+        * From CBaseMtmUiData function query.
+        * @param aOperationId Id for function.
+        * @param aContext messaging store entry.
+        * @return TInt error code.
+        */
+	    virtual TInt OperationSupportedL(
+            TInt aOperationId, 
+            const TMsvEntry& aContext) const;
+
+        /**
+        * From CBaseMtmUiData MTM capability check.
+        * @param aCapability Uid for message type.
+        * @param aResponse response for capability check.
+        * @return TInt error code.
+        */
+	    virtual TInt QueryCapability(
+            TUid aCapability, 
+            TInt& aResponse) const;
+
+        /**
+        * From CBaseMtmUiData MTM related context icons.
+        * @param aContext Messaging entry refence.
+        * @param aStateFlags Flags for icon.
+        * @return TInt error code.
+        */
+	    virtual const CBitmapArray& ContextIcon(
+            const TMsvEntry& aContext, 
+            TInt aStateFlags) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aParent Messaging entry refence.
+        * @param aNewEntry Messaging entry refence(created entry).
+        * @param aReasonResourceId ResourceID.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCreateEntryL(
+            const TMsvEntry& aParent, 
+            TMsvEntry& aNewEntry, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanReplyToEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanForwardEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanEditEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanViewEntryL(const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanOpenEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCloseEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanDeleteFromEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanDeleteServiceL(
+            const TMsvEntry& aService, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCopyMoveToEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCopyMoveFromEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+        virtual TBool CanCancelL(const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @return HBufC* Statustext for sending.
+        */
+        virtual HBufC* StatusTextL(const TMsvEntry& aContext) const;
+
+    protected:  // Functions from base classes
+
+        /**
+        * From CBaseMtmUiData Populate icon array
+        */
+	    virtual void PopulateArraysL();
+
+        /**
+        * From CBaseMtmUiData gets resource filename.
+        */
+	    virtual void GetResourceFileName(TFileName& aFileName) const;
+
+    protected: 
+
+        /**
+        * C++ default constructor.
+        */
+        CBtMtmUiData(CRegisteredMtmDll& aRegisteredDll);
+
+    protected: // New functions
+
+        /**
+        * Checks is the entry valid.
+        * @param aContext reference to the entry.
+        * @return TBool 
+        */
+	    TBool CheckEntry(const TMsvEntry& aContext) const;
+
+	};
+
+
+#endif // CBTMTMUIDATA_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/inc/btmtmuidebug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002 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:  This file defines logging macros for BTMTMUI
+*
+*/
+
+
+#ifndef BTMTMUI_DEBUG_H
+#define BTMTMUI_DEBUG_H
+
+
+#ifdef _DEBUG
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"btmtmui.txt");
+_LIT(KLogDirFullName,"c:\\logs\\mtm\\");
+_LIT(KLogDir,"mtm");
+
+// Declare the FPrint function
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#define FLOG(a)   { FPrint(a); }
+#define FTRACE(a) { a; }
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+#define FLOG(a) { RDebug::Print(a);  }
+#define FTRACE(a) { a; }
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(a)
+#define FTRACE(a)
+
+#endif // _DEBUG
+
+
+#endif // BTMTMUI_DEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmui.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,808 @@
+/*
+* Copyright (c) 2002 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: 
+*       CBtMtmUi class
+*
+*/
+
+
+// INCLUDE FILES
+#include "btmtmui.h"
+#include "btmtmuidebug.h"
+
+//#include <obexmtmuilayer.h>
+#ifdef NO101APPDEPFIXES
+#include <MuiuMsvProgressReporterOperation.h>
+#endif  //NO101APPDEPFIXES
+
+#ifdef NO101APPDEPFIXES_NEW 
+#include <app/btcmtm.h>
+#endif //NO101APPDEPFIXES_NEW
+
+#include <mtmuidef.hrh>
+#include <mtclreg.h>
+#include <obexutilsuilayer.h>
+#include <Obexutils.rsg>
+#include <msvuids.h>
+#include <msvids.h>
+#include <obexconstants.h>
+
+
+// CONSTANTS
+#ifdef NO101APPDEPFIXES
+const TInt KBtMtmUiToFromFieldBuffer     = 80;
+const TInt KBtMtmUiConnectionTimeout     = 20000000;
+const TInt KBtMtmUiConnectionPutTimeout  = 0;
+const TInt KBtMtmUiObexPort              = 1;
+const TInt KBtMtmUiAddressMaxLength      = 3;
+#endif  //NO101APPDEPFIXES
+
+// ENUMS
+enum TBtMtmAsyncCmds
+    {
+    EBtMtmCmdSend
+    };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CBtMtmUi::CBtMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll )
+	:	CBaseMtmUi( aBaseMtm, aRegisteredMtmDll )
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: CBtMtmUi\t" ) );
+	}
+
+// Two-phased constructor.
+CBtMtmUi* CBtMtmUi::NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll )
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: NewL\t" ) );
+	CBtMtmUi* self = new( ELeave ) CBtMtmUi( aBaseMtm, aRegisteredMtmDll );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// Destructor
+CBtMtmUi::~CBtMtmUi()
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: ~CBtMtmUi\t" ) );
+	delete iClientRegistry;
+	}
+
+// Symbian OS default constructor can leave.
+void CBtMtmUi::ConstructL()
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: ConstructL\t" ) );
+    CBaseMtmUi::ConstructL();
+	}
+
+// ---------------------------------------------------------
+// GetResourceFileName(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+void CBtMtmUi::GetResourceFileName( TFileName& aFileName ) const
+	{ 
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetResourceFileName\t" ) );
+    aFileName = KObexUtilsFileDrive;
+    aFileName += KDC_RESOURCE_FILES_DIR;
+    aFileName += KObexUtilsResourceFileName;
+	}
+
+// ---------------------------------------------------------
+// QueryCapability(TUid aCapability, TInt& aResponse)
+// return capability of mtm.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::QueryCapability(TUid aCapability, TInt& aResponse)
+	{ 
+    // Querying of menu availablility is done in syni.
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: QueryCapability\t" ) );
+	if( aCapability.iUid == KUidMsvMtmUiQueryCanPrintMsgValue )
+		{
+		aResponse = ETrue;
+		return KErrNone;
+		}
+	return CBaseMtmUi::QueryCapability( aCapability, aResponse );
+	}
+
+// ---------------------------------------------------------
+// InvokeSyncFunctionL(...)
+// Invoke sync -function from BaseMTM.
+// ---------------------------------------------------------
+//
+void CBtMtmUi::InvokeSyncFunctionL( TInt aFunctionId, 
+                                   const CMsvEntrySelection& aSelection, 
+                                   TDes8& aParameter )
+	{
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: InvokeSyncFunctionL\t" ) );
+	CBaseMtmUi::InvokeSyncFunctionL( aFunctionId, aSelection, aParameter );
+	}
+
+
+// ---------------------------------------------------------
+// CreateL(...)
+// Entry creation forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CreateL( const TMsvEntry& /*aEntry*/,
+                                 CMsvEntry& /*aParent*/, 
+                                 TRequestStatus& /*aStatus*/ )
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: CreateL\t" ) );
+    // Entries created through utility functions.
+	User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// OpenL(TRequestStatus& aStatus)
+// handles opening entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::OpenL( TRequestStatus& aStatus )
+	{
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: OpenL\t" ) );
+	const TMsvEntry& context = iBaseMtm.Entry().Entry();
+	const TUid type( context.iType );
+	if( ( type == KUidMsvMessageEntry ) &&  
+         ( ( context.Parent() == KMsvSentEntryIdValue )
+         ||( context.Parent() == KMsvGlobalInBoxIndexEntryIdValue ) ) )
+        {
+		// Message is in the sent folder, so can't be edited
+		return ViewL( aStatus );
+        }
+	return EditL( aStatus );
+	}
+
+// ---------------------------------------------------------
+// OpenL(...)
+// handles opening entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::OpenL( TRequestStatus& aStatus, 
+                               const CMsvEntrySelection& aSelection )
+	{
+	iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+	return OpenL( aStatus );
+	}
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CloseL( TRequestStatus& aStatus )
+	{
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: CloseL\t" ) );
+	CMsvCompletedOperation* op = CMsvCompletedOperation::NewL( Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus);
+	return op;
+	}
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CloseL(
+    TRequestStatus& aStatus, 
+    const CMsvEntrySelection& aSelection)
+	{
+	iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+	return CloseL( aStatus );
+	}
+
+// ---------------------------------------------------------
+// EditL(...)
+// Handles message sending using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::EditL( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection )
+	{
+    FLOG( _L( "[BtMtmUi] CBtMtmUi: EditL 1 \t" ) );
+	iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+	return EditL( aStatus );
+	}
+
+// ---------------------------------------------------------
+// EditL(TRequestStatus& aStatus)
+// Handles message sending over Bluetooth.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::EditL( TRequestStatus& aStatus )
+	{
+	FLOG( _L( "[BtMtmUi] CBtMtmUi: EditL 2 \t" ) );
+	switch( iBaseMtm.Entry().Entry().iType.iUid )
+		{
+	    case KUidMsvMessageEntryValue:
+		    {
+		    if( iBaseMtm.Entry().Entry().Parent() != KMsvDraftEntryId &&
+		       iBaseMtm.Entry().Entry().Parent() != KMsvGlobalOutBoxIndexEntryId )
+			    {
+			    //   Edit/"use" entries in the Inbox
+			    return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );   
+			    }
+#ifdef NO101APPDEPFIXES
+		    else
+			    {
+			    TInt resourceId;
+                HBufC* password = HBufC::NewL(1);
+                CleanupStack::PushL( password );  // 1st push
+                BaseMtm().LoadMessageL();
+
+                TBTDevAddr address;
+
+                CBtClientMtm::SBtcCmdSendParams sendparams;
+			    sendparams.iTimeouts.iConnectTimeout    = KBtMtmUiConnectionTimeout;
+			    sendparams.iTimeouts.iPutTimeout        = KBtMtmUiConnectionPutTimeout;
+			    sendparams.iRemoteObexPort              = KBtMtmUiObexPort;
+			    sendparams.iConnectPassword             = password;
+
+                iDiscovery = CBTEngDiscovery::NewL(this);
+				CBTDevice* iDevice = CBTDevice::NewL( );
+				
+
+                if ( iDiscovery->SearchRemoteDevice( iDevice ) == KErrNone )
+                    {
+                    TInt retVal=0;
+				    iWaiter.Start();
+				    
+				    if ( iState ==KErrNone)
+				        {
+					    address = iDevice->BDAddr();
+				        FLOG( _L( "[BtMtmUi] CBtMtmUi:SearchRemoteChannelL \t" ) );
+                        retVal = iDiscovery->RemoteProtocolChannelQuery(address, TUUID(KBTSdpObjectPush));
+                        if(retVal == KErrNone)
+                            {
+                            iWaiter.Start();
+                            }
+                        }
+                    if ( retVal != KErrNone ||iState  != KErrNone )
+                        {
+                        resourceId = R_BT_DEV_NOT_AVAIL;                        
+						TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+                        CleanupStack::PopAndDestroy(3); // BtDevice, BtConnection, password
+                        return CMsvCompletedOperation::NewL(
+                             Session(), 
+                             Type(), 
+                             KNullDesC8, 
+                             KMsvLocalServiceIndexEntryId, 
+                            aStatus );
+                        }                     
+                    sendparams.iRemoteObexPort = iClientChannel;
+
+			        TPtrC8 ptr8 = address.Des();
+                    TBuf16<KBtMtmUiAddressMaxLength> convertedaddress16;//48 bits
+                    // Bt address conversion
+			        TInt i;
+                    for( i=0; i<3; i++ )
+                        {
+			            TUint16 word = ptr8[( i*2 )+1];
+			            word = ( TUint16 )( word << 8 );
+			            word = ( TUint16 )( word + ptr8[i*2] );
+			            convertedaddress16.Append( &word, 1 );
+			            }
+
+			        BaseMtm().AddAddresseeL( convertedaddress16 );
+                    }
+                else
+                    {
+                    CleanupStack::PopAndDestroy(3); // BtDevice, BTConnection, password
+				    FLOG( _L( "[BTMTMUI] CBtMtmUi:CMsvCompletedOperation NewL\t" ) );
+                    return CMsvCompletedOperation::NewL(
+                        Session(), 
+                        Type(), 
+                        KNullDesC8, 
+                        KMsvLocalServiceIndexEntryId, 
+                        aStatus );
+                    }
+
+			    CMsvEntrySelection* sel = new( ELeave ) CMsvEntrySelection();
+			    CleanupStack::PushL( sel );					// 4th push
+			    sel->AppendL( BaseMtm().Entry().EntryId() );
+			    
+			    CMsvOperationWait* waiter = CMsvOperationWait::NewLC();	// 5th push
+                
+                TBuf<KBtMtmUiToFromFieldBuffer> toFrom;
+                resourceId = R_BT_SEND_OUTBOX_SENDING;                
+				TObexUtilsUiLayer::ReadResourceL( toFrom, resourceId );
+                                
+                BaseMtm().SaveMessageL();
+			    
+                TMsvEntry newTEntry( iBaseMtm.Entry().Entry() );
+			    newTEntry.iDetails.Set( toFrom );
+                newTEntry.SetVisible( ETrue );
+                newTEntry.SetInPreparation( ETrue );
+
+                iBaseMtm.Entry().ChangeL( newTEntry );
+
+			    CMsvEntry* entry = 
+                    BaseMtm().Session().GetEntryL( KMsvDraftEntryId );
+
+                CleanupStack::PushL( entry );  // 6th push
+
+			    CMsvOperation* moveOp = entry->MoveL(
+                    *sel,
+                    KMsvGlobalOutBoxIndexEntryId, 
+                    waiter->iStatus );
+
+                CleanupStack::PopAndDestroy( entry );
+
+			    waiter->Start();
+			    CActiveScheduler::Start();
+			    delete moveOp;
+
+                CMsvProgressReporterOperation* reporter 
+                    = CMsvProgressReporterOperation::NewL( Session(), aStatus );
+			    CleanupStack::PushL( reporter );  // 6th push
+
+   			    TPckgBuf<CBtClientMtm::SBtcCmdSendParams> paramBuf( sendparams );
+			    
+  			    CMsvOperation* op = BaseMtm().InvokeAsyncFunctionL(
+                    EBtMtmCmdSend, 
+                    *sel,
+                    paramBuf, 
+                    reporter->RequestStatus() );
+
+                // ownership of op transfered to reporter
+		        reporter->SetOperationL( op ); 
+
+                aStatus = KRequestPending;
+
+                CleanupStack::Pop( reporter );
+                CleanupStack::PopAndDestroy(3);  // waiter, sel,  password
+                return reporter;
+			    }
+#endif  //NO101APPDEPFIXES
+		    }
+	    case KUidMsvServiceEntryValue:
+	    case KUidMsvAttachmentEntryValue:
+	    case KUidMsvFolderEntryValue:
+            {
+		    User::Leave( KErrNotSupported );
+            }
+        default:
+            {
+            break;
+            }
+		}
+
+	CMsvCompletedOperation* op = CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus );
+    aStatus = KRequestPending;
+	return op;
+	}
+
+// ---------------------------------------------------------
+// ViewL(TRequestStatus& aStatus)
+// Handles viewing of received object.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ViewL( TRequestStatus& aStatus )
+	{
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: ViewL\t" ) );
+	return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );
+	}
+
+// ---------------------------------------------------------
+// ViewL(...)
+// Handles viewing of received object using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ViewL( TRequestStatus& aStatus, 
+                               const CMsvEntrySelection& aSelection )
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: ViewL 1\t" ) );
+	iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+	return ViewL( aStatus );
+	}
+
+// ---------------------------------------------------------
+// CopyFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CopyFromL( const CMsvEntrySelection& /*aSelection*/, 
+                                   TMsvId /*aTargetId*/, 
+                                   TRequestStatus& /*aStatus*/ )
+	{
+    User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// MoveFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::MoveFromL( const CMsvEntrySelection& /*aSelection*/, 
+                                   TMsvId /*aTargetId*/, 
+                                   TRequestStatus& /*aStatus*/ )
+	{
+    User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// MoveToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::MoveToL( const CMsvEntrySelection& /*aSelection*/, 
+                                 TRequestStatus& /*aStatus*/)
+	{
+    User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// CopyToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CopyToL( const CMsvEntrySelection& /*aSelection*/, 
+                                 TRequestStatus& /*aStatus*/)
+	{
+    User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// DisplayProgressSummary(const TDesC8& aProgress) const
+// calls leaving DisplayProgressSummaryL -function and
+// traps the error.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::DisplayProgressSummary( const TDesC8& aProgress ) const
+    {
+    TInt retVal = KErrNone;
+    TRAP( retVal, retVal = DisplayProgressSummaryL( aProgress ) );
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// DisplayProgressSummary(const TDesC8& aProgress) const
+// calls leaving DisplayProgressSummaryL -function and
+// traps the error.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::DisplayProgressSummaryL( const TDesC8& aProgress ) const
+    {
+    #ifndef NO101APPDEPFIXES_NEW
+    (void) aProgress;
+    #endif //NO101APPDEPFIXES_NEW
+
+    #ifdef NO101APPDEPFIXES_NEW
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL\t" ) );
+    TInt resourceId;
+    if( ( !aProgress.Length() ) || ( aProgress.Size() == sizeof( TMsvLocalOperationProgress ) ) )
+        {
+        // Probably a CMsvCompletedOperation
+        return KErrCancel;
+        }
+	TPckgBuf<TObexMtmProgress> paramPack;
+	paramPack.Copy( aProgress );
+	TObexMtmProgress& progress = paramPack();
+
+	const TObexMtmProgress::TSendState progressType	= progress.iSendState;
+	const TInt error = progress.iError;
+    if ( error == KErrInUse )
+		{
+        resourceId = R_BT_DEV_NOT_AVAIL;
+		TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+	    return KErrNone;
+		}
+    
+	switch( progressType )
+		{
+	    case TObexMtmProgress::EDisconnected:
+            {
+            FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: EDisconnected\t" ) );
+            // Allowed to send again.
+            resourceId = R_BT_DATA_SENT;
+			TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+		    break;
+            }
+        case TObexMtmProgress::ESendError:
+            {
+            FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendError\t" ) );
+            if( error == KErrIrObexClientNoDevicesFound )
+                {
+                resourceId = R_BT_DEV_NOT_AVAIL;
+				TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+                }
+            else
+                {
+                resourceId = R_BT_FAILED_TO_SEND;
+				TObexUtilsUiLayer::ShowErrorNoteL( resourceId );
+                }
+            break;
+            }
+        case TObexMtmProgress::ESendComplete:
+            {
+            FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendComplete\t" ) );
+            break;
+            }
+        case TObexMtmProgress::EInitialise:
+	    case TObexMtmProgress::EConnect:
+	    case TObexMtmProgress::EConnectAttemptComplete:
+	    case TObexMtmProgress::ESendObject:
+	    case TObexMtmProgress::ESendNextObject:
+            {
+            FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendObject\t" ) );
+            return KErrCancel;
+            }
+        case TObexMtmProgress::EUserCancelled:
+            {
+            FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: EUserCancelled\t" ) );
+            return KErrCancel;
+            }
+	    default:
+            {
+            FTRACE( FPrint(_L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: Default\t %d" ), progressType ) );
+            return KErrCancel;
+            }
+        }
+  #endif //NO101APPDEPFIXES_NEW
+	return KErrNone;
+	}
+
+
+// ---------------------------------------------------------
+// GetProgress(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::GetProgress( const TDesC8& aProgress,
+                           TBuf<EProgressStringMaxLen>& aReturnString, 
+                           TInt& aTotalEntryCount, 
+                           TInt& aEntriesDone, 
+                           TInt& aCurrentEntrySize, 
+                           TInt& aCurrentBytesTrans ) const
+	{
+	#ifndef NO101APPDEPFIXES_NEW
+	(void) aProgress;
+	(void) aReturnString;
+	(void) aTotalEntryCount;
+	(void) aEntriesDone;
+	(void) aCurrentEntrySize;
+	(void) aCurrentBytesTrans;	
+	#endif //NO101APPDEPFIXES_NEW
+	
+   #ifdef  NO101APPDEPFIXES_NEW
+    TInt resourceId;    
+
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetProgress\t" ) );	
+	TPckgBuf<TObexMtmProgress> paramPack;
+	paramPack.Copy( aProgress );
+	TObexMtmProgress& progress = paramPack();
+    const TObexMtmProgress::TSendState progressType	= progress.iSendState;
+	aTotalEntryCount	= progress.iTotalEntryCount;
+	aEntriesDone		= progress.iEntriesDone;
+	aCurrentEntrySize	= progress.iCurrentEntrySize; 
+	aCurrentBytesTrans	= progress.iCurrentBytesTrans;
+
+    if( aTotalEntryCount > 1 ) // This is for progress bar multisending
+        {
+        aCurrentEntrySize = 0;
+        }
+
+	switch( progressType )
+		{
+	    case TObexMtmProgress::ENullOp:
+	    case TObexMtmProgress::ESendError:
+            {
+		    aReturnString = KNullDesC;
+		    break;
+            }
+	    case TObexMtmProgress::EInitialise:
+	    case TObexMtmProgress::EConnect:
+	    case TObexMtmProgress::EConnectAttemptComplete:
+            {
+            resourceId = R_BT_CONNECTING;
+			TRAPD( retVal, TObexUtilsUiLayer::ReadResourceL( aReturnString, resourceId ) );
+						retVal=retVal; //avoid warning
+            // Leave causes progress note to be empty. Not fatal
+		    break;
+            }
+	    case TObexMtmProgress::ESendObject:
+	    case TObexMtmProgress::ESendNextObject:
+	    case TObexMtmProgress::ESendComplete:
+            {
+            resourceId = R_BT_SENDING_DATA;
+			TRAPD( retVal, TObexUtilsUiLayer::ReadResourceL( aReturnString, resourceId ) );
+            // Leave causes progress note to be empty. Not fatal
+            retVal=retVal; //avoid warning
+		    break;
+            }
+	    case TObexMtmProgress::EDisconnected:
+            {
+		    break;
+            }
+	    default:
+            {
+		    return KErrCancel;
+            }
+		}
+	FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetProgress Done\t" ) );
+	#endif //NO101APPDEPFIXES_NEW
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------
+// LaunchEditorApplicationL(...)
+// Launch viewer for selected object. The first is object's 
+// recognition(document handler).
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::LaunchEditorApplicationL( TRequestStatus& aStatus, 
+                                                  CMsvSession& aSession)
+	{
+	FLOG( _L( "[CommonMtmUi] CBtMtmUi: LaunchEditorApplicationL\t" ) );
+	CMsvEntry* message;
+	message = &iBaseMtm.Entry();    
+	return TObexUtilsUiLayer::LaunchEditorApplicationOperationL( aSession, message, aStatus );
+	}
+
+// ---------------------------------------------------------
+// GetClientMtmLC(TUid aMtmType)
+// Handles MTM registration.
+// ---------------------------------------------------------
+//
+CBaseMtm* CBtMtmUi::GetClientMtmLC( TUid aMtmType )
+	{
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetClientMtmLC\t" ) );
+	if( !iClientRegistry )
+        {
+		iClientRegistry = CClientMtmRegistry::NewL( Session() );
+        }
+	CBaseMtm* mtm = iClientRegistry->NewMtmL( aMtmType );
+	CleanupStack::PushL( mtm );
+	return mtm;
+	}
+
+// ---------------------------------------------------------
+// DeleteFromL(TUid aMtmType)
+// passes entry selection to Base for deletion.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::DeleteFromL( const CMsvEntrySelection& aSelection, 
+                                     TRequestStatus& aStatus )
+	{
+	return CBaseMtmUi::DeleteFromL( aSelection, aStatus );
+	}
+
+// ---------------------------------------------------------
+// DeleteServiceL(...)
+// has no service, just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::DeleteServiceL( const TMsvEntry& /*aService*/, 
+                                        TRequestStatus& aStatus)
+	{
+	return CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus);
+	}
+
+// ---------------------------------------------------------
+// ReplyL(...)
+// Reply is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ReplyL( TMsvId /*aDestination*/, 
+                                TMsvPartList /*aPartlist*/, 
+                                TRequestStatus& /*aCompletionStatus*/ )
+	{
+	User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// ForwardL(...)
+// Forward is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ForwardL( TMsvId /*aDestination*/, 
+                                  TMsvPartList /*aPartList*/, 
+                                  TRequestStatus& /*aCompletionStatus*/ )
+	{
+	User::Leave( KErrNotSupported );
+    // Return value is needed for removing compilation errors
+    return NULL;
+	}
+
+// ---------------------------------------------------------
+// CancelL(...)
+// No MS way of sending a message from the outbox, so no need to cancel.
+// Just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CancelL( TRequestStatus& aStatus, 
+                                 const CMsvEntrySelection& /*aSelection*/)
+    { 
+	return CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus, 
+        KErrNone);
+    }
+    
+// -----------------------------------------------------------------------------
+//  CBtMtmUi::ServiceSearchComplete
+// -----------------------------------------------------------------------------
+//	
+void CBtMtmUi::ServiceSearchComplete( const RSdpRecHandleArray& /*aResult*/, 
+                                         TUint /*aTotalRecordsCount*/, TInt /*aErr */)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBtMtmUi::AttributeSearchComplete(
+// -----------------------------------------------------------------------------
+//	
+void CBtMtmUi::AttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
+                                           const RSdpResultArray& aAttr, 
+                                           TInt aErr )
+    {
+   iState=aErr;     
+    if (aErr==KErrNone)
+        {            
+        RSdpResultArray results=aAttr;    
+        iDiscovery->ParseRfcommChannel(results,iClientChannel);                        
+        }   
+    iWaiter.AsyncStop();
+    }
+// -----------------------------------------------------------------------------
+// CBtMtmUi::ServiceAttributeSearchComplete
+// -----------------------------------------------------------------------------
+//	
+void CBtMtmUi::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
+                                                          const RSdpResultArray& /*aAttr*/, 
+                                                          TInt /*aErr*/ )
+    {
+    }
+// -----------------------------------------------------------------------------
+// CBtMtmUi::DeviceSearchComplete
+// -----------------------------------------------------------------------------
+//	
+void CBtMtmUi::DeviceSearchComplete( CBTDevice* /*aDevice*/, TInt aErr )
+    {
+    iState=aErr;        
+    iWaiter.AsyncStop();
+    }            
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmuidata.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2002 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: 
+*      Class CBtMtmUiData
+*
+*/
+
+
+// INCLUDE FILES
+#include "btmtmuidata.h"
+#include "btmtmuidebug.h"
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mtmdef.hrh>       //kuidmtmquerymaxbodysizevalue etc
+#else
+#include <mtmdef.hrh>       //kuidmtmquerymaxbodysizevalue etc
+#include <mtmuidsdef.hrh>       //kuidmtmquerymaxbodysizevalue etc
+#endif
+#include <msvuids.h>
+#include <Obexutils.rsg> 
+#include <obexutilsmessagehandler.h>
+
+
+const TInt KBtMtmUiNfcContext       = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+CBtMtmUiData* CBtMtmUiData::NewL( CRegisteredMtmDll& aRegisteredDll )
+	{
+    FLOG( _L( " CBtMtmUiData: CBtMtmUiData\t" ) );
+	CBtMtmUiData* self = new(ELeave) CBtMtmUiData( aRegisteredDll );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// Symbian OS default constructor can leave.
+void CBtMtmUiData::ConstructL()
+	{
+    FLOG( _L( " CBtMtmUiData: ConstructL\t" ) );
+    CBaseMtmUiData::ConstructL();
+    TObexUtilsMessageHandler::CreateDefaultMtmServiceL(KUidMsgTypeBt);
+    FLOG( _L( " CBtMtmUiData: ConstructL done\t" ) );
+	}
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CBtMtmUiData::CBtMtmUiData(CRegisteredMtmDll& aRegisteredDll)
+	:       CBaseMtmUiData(aRegisteredDll)
+	{
+    FLOG( _L( " CBtMtmUiData: CBtMtmUiData\t" ) );
+	}
+
+// Destructor
+CBtMtmUiData::~CBtMtmUiData()
+	{ 
+    FLOG( _L( " CBtMtmUiData: ~CBtMtmUiData\t" ) );
+	}
+
+// ---------------------------------------------------------
+// OperationSupportedL(...)
+// 
+// ---------------------------------------------------------
+//
+TInt CBtMtmUiData::OperationSupportedL( TInt /*aOperationId*/, 
+                                       const TMsvEntry& /*aContext*/) const
+	{
+    FLOG( _L( " CBtMtmUiData: OperationSupportedL\t" ) );    
+	return TObexUtilsUiLayer::OperationNotSupported(); 
+	}
+
+// ---------------------------------------------------------
+// QueryCapability(...)
+// MTM query capability
+// ---------------------------------------------------------
+//
+TInt CBtMtmUiData::QueryCapability( TUid aCapability, 
+                                   TInt& aResponse ) const
+	{
+    FLOG( _L( " CBtMtmUiData: QueryCapability\t" ) );
+	switch( aCapability.iUid )
+		{
+	    // --- Supported valued capabilities ---
+	    case KUidMtmQueryMaxBodySizeValue:
+            {
+		    aResponse = KMaxTInt;
+		    break;
+            }
+	    case KUidMtmQueryMaxTotalMsgSizeValue:
+            {
+		    aResponse = KMaxTInt;
+		    break;
+            }
+	    case KUidMsvMtmQueryEditorUidValue:
+            {
+			aResponse = 0;
+		    break;
+            }
+	    case KUidMtmQuerySupportAttachmentsValue:
+	    case KUidMtmQueryCanSendMsgValue:
+            {
+		    break;
+            }
+	    case KUidMtmQuerySupportedBodyValue:    
+	    default:
+            {
+		    return KErrNotSupported;
+            }
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------
+// CBitmapArray& CBtMtmUiData::ContextIcon(...)
+// Handles received msg icon.
+// ---------------------------------------------------------
+//
+const CBaseMtmUiData::CBitmapArray& CBtMtmUiData::ContextIcon( const TMsvEntry& aContext, 
+                                                              TInt /*aStateFlags*/) const
+	{
+	// Check if NFC context
+	TInt icon = 0;
+	if ( aContext.MtmData1() == KBtMtmUiNfcContext )
+	    {
+      icon = TObexUtilsUiLayer::ContextIcon( aContext, ENfc );
+	    }
+	else
+	    {
+	    icon = TObexUtilsUiLayer::ContextIcon( aContext, EBluetooth );
+	    }
+
+	return *iIconArrays->At( icon/2 ); 
+	}
+
+// ---------------------------------------------------------
+// PopulateArraysL()
+// Populates bitmap array 
+// ---------------------------------------------------------
+//
+void CBtMtmUiData::PopulateArraysL()
+	{
+    FLOG( _L( " CBtMtmUiData: PopulateArraysL\t" ) );
+	TObexUtilsUiLayer::CreateIconsL( KUidMsgTypeBt, iIconArrays );
+	}
+
+// ---------------------------------------------------------
+// GetResourceFileName(TFileName& aFileName) const
+// Gives resource filename.
+// ---------------------------------------------------------
+//
+void CBtMtmUiData::GetResourceFileName( TFileName& aFileName ) const
+	{ 
+    FLOG( _L( " CBtMtmUiData: GetResourceFileName\t" ) );
+    aFileName = KObexUtilsFileDrive;
+    aFileName += KDC_RESOURCE_FILES_DIR;
+    aFileName += KObexUtilsResourceFileName;
+	}
+
+// ---------------------------------------------------------
+// CanCreateEntryL(...)
+// Checks if it is possible to create entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanCreateEntryL( const TMsvEntry& aParent, 
+                                    TMsvEntry& aNewEntry, 
+                                    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanCreateEntryL\t" ) );
+	aReasonResourceId = 0;
+	if( CheckEntry( aNewEntry ) )
+		{
+        // --- Can create messages in local folders ---
+		return ( aParent.iMtm.iUid == KMsvLocalServiceIndexEntryIdValue );
+		}
+	// --- Can't create other types ---
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanOpenEntryL(...)
+// Checks if it is possible to open entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanOpenEntryL( const TMsvEntry& aContext, 
+                                  TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanOpenEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvMessageEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCloseEntryL(...)
+// Checks if it is possible to close entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanCloseEntryL( const TMsvEntry& aContext, 
+                                   TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanCloseEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvServiceEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanViewEntryL(...)
+// Checks if it is possible to view entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanViewEntryL( const TMsvEntry& aContext, 
+                                  TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanViewEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvMessageEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}   
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanEditEntryL(...)
+// Checks if it is possible to edit entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanEditEntryL( const TMsvEntry& aContext, 
+                                  TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanEditEntryL\t" ) );
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	if( CheckEntry( aContext ) )
+		{
+		if ( ( aContext.iType.iUid == KUidMsvMessageEntryValue ) || 
+             ( aContext.iType.iUid == KUidMsvFolderEntryValue ) )
+			{
+			aReasonResourceId=0;
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanDeleteServiceL(...)
+// Checks if it is possible to delete service.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanDeleteServiceL( const TMsvEntry& /*aService*/, 
+                                      TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CanDeleteServiceL\t" ) );   
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+    return EFalse; 
+	}
+
+// ---------------------------------------------------------
+// CanDeleteFromEntryL(...)
+// Checks if it is possible to delete from entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanDeleteFromEntryL( const TMsvEntry& /*aContext*/, 
+                                        TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCopyMoveToEntryL(...)
+// Checks if it is possible to move to entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanCopyMoveToEntryL( const TMsvEntry& /*aContext*/, 
+                                        TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCopyMoveFromEntryL(...)
+// Checks if it is possible to move from entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanCopyMoveFromEntryL( const TMsvEntry& /*aContext*/,
+                                          TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported(); 
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanReplyToEntryL(...)
+// Checks if it is possible to reply to entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanReplyToEntryL( const TMsvEntry& /*aContext*/, 
+                                     TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;	// Not Ok to do
+	}
+
+// ---------------------------------------------------------
+// CanForwardEntryL(...)
+// Checks if it is possible to forward entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanForwardEntryL( const TMsvEntry& /*aContext*/, 
+                                     TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;	// Not Ok to do
+	}
+
+// ---------------------------------------------------------
+// CheckEntry(...)
+// Checks is the entry valid.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CheckEntry( const TMsvEntry& /*aContext*/ ) const
+	{
+    FLOG( _L( " CBtMtmUiData: CheckEntry\t" ) );
+    return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCancelL(...)
+// Checks if it is possible to cancel entry.
+// ---------------------------------------------------------
+//
+TBool CBtMtmUiData::CanCancelL( const TMsvEntry& /*aContext*/,
+                               TInt& aReasonResourceId ) const
+    {
+    // No way of sending a message from the outbox, so no need to cancel.
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+    }
+
+// ---------------------------------------------------------
+// StatusTextL(...)
+// Returns status text when sending message(outbox).
+// ---------------------------------------------------------
+//
+HBufC* CBtMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const
+    {  
+    FLOG( _L( " CBtMtmUiData: StatusTextL\t" ) );
+    TBuf<80> buffer;
+    TInt resourceId = R_BT_SEND_PROGRESS_SENDING;
+    TObexUtilsUiLayer::ReadResourceL( buffer, resourceId );
+    return buffer.AllocL();
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/src/btmtmuidll.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2002 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: 
+*     DLL interface
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "btmtmuidata.h"
+#include "btmtmui.h"
+#include "btmtmuidebug.h"
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+// ---------------------------------------------------------
+// NewBtMtmUiL Creates new MTM UI (BT)
+// Returns: CBaseMtmUi pointer to created mtm
+// ---------------------------------------------------------
+//
+EXPORT_C CBaseMtmUi* NewBtMtmUiL( CBaseMtm& aMtm, CRegisteredMtmDll& aRegisteredDll )
+	{
+    FLOG( _L( "CBtMtmUi: NewBtMtmUiL\t" ) );
+	return CBtMtmUi::NewL( aMtm, aRegisteredDll );
+	}
+
+// ---------------------------------------------------------
+// NewBtMtmUiDataLayerL Creates new MTM UI data layer (BT)
+// Returns: CBaseMtmUiData pointer to created mtm
+// ---------------------------------------------------------
+//
+EXPORT_C CBaseMtmUiData* NewBtMtmUiDataLayerL( CRegisteredMtmDll& aRegisteredDll )
+	{
+    FLOG( _L( "CBtMtmUi: NewBtMtmUiDataLayerL\t" ) );
+	return CBtMtmUiData::NewL( aRegisteredDll );
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/bmarm/IRMTMUIU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	NewMtmUiDataLayerL__FR17CRegisteredMtmDll @ 1 NONAME R3UNUSED ; NewMtmUiDataLayerL(CRegisteredMtmDll &)
+	NewMtmUiL__FR8CBaseMtmR17CRegisteredMtmDll @ 2 NONAME R3UNUSED ; NewMtmUiL(CBaseMtm &, CRegisteredMtmDll &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/bwins/IRMTMUIU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewMtmUiDataLayerL@@YAPAVCBaseMtmUiData@@AAVCRegisteredMtmDll@@@Z @ 1 NONAME ; class CBaseMtmUiData * __cdecl NewMtmUiDataLayerL(class CRegisteredMtmDll &)
+	?NewMtmUiL@@YAPAVCBaseMtmUi@@AAVCBaseMtm@@AAVCRegisteredMtmDll@@@Z @ 2 NONAME ; class CBaseMtmUi * __cdecl NewMtmUiL(class CBaseMtm &,class CRegisteredMtmDll &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/data/irmtmui.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains infrared MTM info resource. Entry points to Mtm Ui.
+*     
+*
+*/
+
+
+//  INCLUDES
+#include <mtmconfig.rh>
+#include <avkon.loc> 
+
+
+
+#include <e32capability.h>
+
+RESOURCE MTM_INFO_FILE
+	{
+	mtm_type_uid = 0x100053A4;
+	technology_type_uid = 0x1000539F;
+	components = 
+		{		
+		MTM_COMPONENT_V2
+			{
+			human_readable_name = qtn_query_send_via_ir;
+			component_uid = KUidMtmServerComponentVal;
+			entry_point = 1;
+			version = VERSION_V2 {};
+			filename = "irs.dll";
+			},
+		MTM_COMPONENT_V2
+			{
+			human_readable_name = qtn_query_send_via_ir;
+			component_uid = KUidMtmClientComponentVal;
+			entry_point = 1;
+			version = VERSION_V2 {};
+			filename = "irc.dll";
+			},
+		MTM_COMPONENT_V2
+			{
+			human_readable_name = qtn_query_send_via_ir;
+			component_uid = KUidMtmUiComponentVal;
+			entry_point = 2;
+			version = VERSION_V2 {};
+			filename = "irmtmui.dll";
+			},
+		MTM_COMPONENT_V2
+			{
+			human_readable_name = qtn_query_send_via_ir;
+			component_uid = KUidMtmUiDataComponentVal;
+			entry_point = 1;
+			version = VERSION_V2 {};
+			filename = "irmtmui.dll";
+			}
+		};
+	}
+
+
+RESOURCE MTM_CAPABILITIES
+    {
+//    send_capability = 1; 
+    send_capability = 0;
+    body_capability = 1; 
+    }
+
+RESOURCE MTM_SECURITY_CAPABILITY_SET
+    {
+    capabilities = { ECapabilityLocalServices };
+    }
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/eabi/irmtmuiU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,8 @@
+EXPORTS
+	_Z18NewMtmUiDataLayerLR17CRegisteredMtmDll @ 1 NONAME
+	_Z9NewMtmUiLR8CBaseMtmR17CRegisteredMtmDll @ 2 NONAME
+	_ZTI12CIrMtmUiData @ 3 NONAME ; #<TI>#
+	_ZTI8CIrMtmUi @ 4 NONAME ; #<TI>#
+	_ZTV12CIrMtmUiData @ 5 NONAME ; #<VT>#
+	_ZTV8CIrMtmUi @ 6 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/group/IRmtmuiRegistry.mk	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,74 @@
+#
+# 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:
+#
+# Build resource files
+#
+
+SOURCEDIR=..\group
+LANGUAGE=sc
+
+#
+# Target directory
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+TARGETDIR=$(EPOCROOT)Epoc32\Release\$(PLATFORM)\$(CFG)\Z\System\Mtm
+else
+TARGETDIR=$(EPOCROOT)Epoc32\Data\Z\System\Mtm
+endif
+
+$(TARGETDIR) :
+	@perl $(EPOCROOT)epoc32\tools\emkdir.pl $(TARGETDIR)
+
+#
+# Build the mtm resource files
+#
+
+PROJECT=IRMTMU
+SOURCERESOURCE=$(SOURCEDIR)\$(PROJECT)Registry.rss
+TARGETRESOURCE=$(TARGETDIR)\$(PROJECT).r$(LANGUAGE)
+$(TARGETRESOURCE) : $(TARGETDIR) $(SOURCERESOURCE)
+	@copy $(SOURCERESOURCE) $(TARGETDIR)\$(PROJECT).rss
+	@epocrc.bat -u -I. -I%EPOCROOT%s60\irmtmui\group -I%EPOCROOT%epoc32\include $(TARGETDIR)\$(PROJECT).rss -o$(TARGETRESOURCE)
+	@del $(TARGETDIR)\$(PROJECT).rss
+
+do_nothing:
+	rem do nothing
+
+#
+# The targets invoked by abld 
+#
+
+MAKMAKE : do_nothing
+
+RESOURCE : $(TARGETRESOURCE)
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN : 
+	@erase $(TARGETRESOURCE)
+
+RELEASABLES : 
+	@echo $(TARGETRESOURCE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a MtmUiInfrared.
+*
+*/
+
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+../group/irmtmui.mmp
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/group/irmtmui.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 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: 
+*    This is project specification file for the IrMtmUi.
+*     
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          irmtmui.dll
+TARGETTYPE      dll
+TARGETPATH      SHARED_LIB_DIR
+UID             0x10004845 0x101F8635
+CAPABILITY      CAP_GENERAL_DLL
+VENDORID      	VID_DEFAULT
+
+SOURCEPATH	    ../data
+START RESOURCE irmtmui.rss
+TARGETPATH MTM_INFO_FILE_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+SOURCEPATH      ../src
+USERINCLUDE     ../inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCE          irmtmui.cpp 
+SOURCE          irmtmuidata.cpp 
+SOURCE          irmtmuidll.cpp
+
+LIBRARY         obexutils.lib
+LIBRARY         euser.lib
+LIBRARY         msgs.lib
+LIBRARY         mtur.lib
+// LIBRARY         muiu.lib // Used for forwarding messages over Infrared
+LIBRARY         featmgr.lib
+DEBUGLIBRARY	flogger.lib
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002 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:  This file defines logging macros for IrMTMUI
+*
+*/
+
+
+#ifndef IRMTMUI_DEBUG_H
+#define IRMTMUI_DEBUG_H
+
+
+#ifdef _DEBUG
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"irmtmui.txt");
+_LIT(KLogDirFullName,"c:\\logs\\mtm\\");
+_LIT(KLogDir,"mtm");
+
+// Declare the FPrint function
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#define FLOG(a)   { FPrint(a); }
+#define FTRACE(a) { a; }
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+#define FLOG(a) { RDebug::Print(a);  }
+#define FTRACE(a) { a; }
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(a)
+#define FTRACE(a)
+
+#endif // _DEBUG
+
+
+#endif // IRMTMUI_DEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/irmtmui.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,340 @@
+/*
+* Copyright (c) 2002 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: 
+*     Infrared Mtm Ui part.
+*
+*
+*/
+
+
+#ifndef CIRMTMUI_H
+#define CIRMTMUI_H
+
+//  INCLUDES
+#include <mtmuibas.h>
+#include <obexutilsuilayer.h>
+// CLASS DECLARATION
+
+// FORWARD DECLARATIONS
+class CClientMtmRegistry;
+class CMtmUiLayer;
+
+
+
+/**
+*  CCommonMtmUi
+*/
+class CIrMtmUi : public CBaseMtmUi
+	{
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CIrMtmUi* NewL(
+            CBaseMtm& aBaseMtm, 
+            CRegisteredMtmDll& aRegisteredMtmDll );
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CIrMtmUi();
+
+    public: // Functions from base classes
+
+        /**
+        * From CBaseMtmUi Entry Creation.
+        * @param aEntry reference to entry
+        * @param aParent parent entry
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* CreateL(
+            const TMsvEntry& aEntry, 
+            CMsvEntry& aParent, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Open entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* OpenL( TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Close entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* CloseL( TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Launches editor/settings dialog as appropriate. 
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* EditL( TRequestStatus& aStatus ); 
+	
+        /**
+        * From CBaseMtmUi Launches viewer/settings dialog as appropriate
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ViewL( TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Deletes selection from current context
+	    * Deletes entries from the current context, 
+        * which must be a folder or service of the relevant MTM  
+        * @param aSelection reference to entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* DeleteFromL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Deletes service, which need not 
+        * be the current context.
+        * @param aService reference to entry.
+        * @param aStatus Status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+	    virtual CMsvOperation* DeleteServiceL(
+            const TMsvEntry& aService, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Remove remaining message of deleted service. 
+        * @param aChildren reference to entry selection.
+        * @return None.
+        */
+	    void DeleteRecursivelyL( CMsvEntrySelection& aChildren );
+	
+
+        /**
+        * From CBaseMtmUi Reply entry
+        * @param aDestination id for msv.
+        * @param aPartlist partlist id.
+        * @param aCompletionStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ReplyL(
+            TMsvId aDestination, 
+            TMsvPartList aPartlist, 
+            TRequestStatus& aCompletionStatus );
+	
+
+        /**
+        * From CBaseMtmUi forward entry
+        * @param aDestination id for msv.
+        * @param aPartlist partlist id.
+        * @param aCompletionStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ForwardL(
+            TMsvId aDestination, 
+            TMsvPartList aPartList, 
+            TRequestStatus& aCompletionStatus );
+
+
+        /**
+        * From CBaseMtmUi Open entry
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* OpenL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection ); 
+
+        /**
+        * From CBaseMtmUi Close entry
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CloseL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection ); 
+
+        /**
+        * From CBaseMtmUi Handles sending.
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* EditL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+
+        /**
+        * From CBaseMtmUi Launches viewer/settings dialog as appropriate
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* ViewL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+
+	
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to copy to
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CopyToL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to Move to
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* MoveToL(
+            const CMsvEntrySelection& aSelection, 
+            TRequestStatus& aStatus );
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to copy from
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CopyFromL(
+            const CMsvEntrySelection& aSelection, 
+            TMsvId aTargetId, 
+            TRequestStatus& aStatus ); 
+
+        /**
+        * From CBaseMtmUi Context should be MTM folder/service to move from
+        * @param aStatus status for operation.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* MoveFromL(
+            const CMsvEntrySelection& aSelection, 
+            TMsvId aTargetId, 
+            TRequestStatus& aStatus );
+	
+
+
+        /**
+        * From CBaseMtmUi Display progress summary.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        TInt DisplayProgressSummary( const TDesC8& aProgress ) const;
+
+        /**
+        * From CBaseMtmUi return progress status.
+        * @param aProgress reference to progress packet.
+        * @param aReturnString returned progress text.
+        * @param aTotalEntryCount entry count.
+        * @param aEntriesDone completed entries.
+        * @param aCurrentEntrySize size of the entry.
+        * @param aCurrentBytesTrans transferred bytes.
+        * @return TInt error code.
+        */
+        virtual TInt GetProgress(
+            const TDesC8& aProgress, 
+            TBuf<EProgressStringMaxLen>& aReturnString, 
+            TInt& aTotalEntryCount, 
+            TInt& aEntriesDone,
+		    TInt& aCurrentEntrySize, 
+            TInt& aCurrentBytesTrans ) const;
+
+
+        /**
+        * From CBaseMtmUi Return capability.
+        * @param aCapability UID for capability.
+        * @return TInt error code.
+        */
+        virtual TInt QueryCapability( TUid aCapability, TInt& aResponse );
+
+        /**
+        * From CBaseMtmUi Synchronous MTM function operation.
+        * @param aFunctionId Function ID.
+        * @param CMsvEntrySelection entry reference.
+        * @param aParam parameter for function.
+        * @return None.
+        */
+        virtual void InvokeSyncFunctionL(
+            TInt aFunctionId, 
+            const CMsvEntrySelection& aSelection, 
+            TDes8& aParameter );
+
+        /**
+        * From CBaseMtmUi Cancel sending.
+        * @param aStatus Async status for operation.
+        * @param CMsvEntrySelection entry reference.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        virtual CMsvOperation* CancelL(
+            TRequestStatus& aStatus, 
+            const CMsvEntrySelection& aSelection );
+
+    protected:
+
+        /**
+        * C++ default constructor.
+        */ 
+        CIrMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll );
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        virtual void ConstructL();
+
+    protected: // Functions from base classes
+
+        /**
+        * From CBaseMtmUi return resource filename.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        virtual void GetResourceFileName( TFileName& aFileName ) const;
+
+        /**
+        * From CBaseMtmUi Launch viewer for received message.
+        * @param aStatus Async status for operation.
+        * @param aSession session reference.
+        * @return CMsvOperation pointer to Msg operation.
+        */
+        CMsvOperation*	LaunchEditorApplicationL(
+            TRequestStatus& aStatus, 
+            CMsvSession& aSession );
+
+    protected:  // New functions
+
+        /**
+        * Register MTM.
+        * @param aMtmType MTM UID.
+        * @return CBaseMtm pointer.
+        */
+        CBaseMtm* GetClientMtmLC( TUid aMtmType );
+
+        /**
+        * Display progress summary.
+        * @param aProgress reference to summary text.
+        * @return TInt error code.
+        */
+        TInt DisplayProgressSummaryL( const TDesC8& aProgress ) const;
+ 
+    protected: // data
+        TBuf<EProgressStringMaxLen>     iConnectingText;
+        TBuf<EProgressStringMaxLen>     iSendingText;
+        CClientMtmRegistry*	        	iClientRegistry;    // pointer to registration.
+        TBool				         	iCurrentlySending;  // Sending state
+	};
+
+#endif  // CIRMTMUI_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/inc/irmtmuidata.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2002 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: 
+*     Message type module UI data part.
+*
+*
+*/
+
+
+#ifndef CIRMTMUIDATA_H
+#define CIRMTMUIDATA_H
+
+//  INCLUDES
+#include <mtudcbas.h>
+#include <obexutilsuilayer.h>
+
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATION
+/**
+*  CIrMtmUiData
+*  
+*/
+class CIrMtmUiData : public CBaseMtmUiData
+	{
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CIrMtmUiData* NewL(CRegisteredMtmDll& aRegisteredDll);
+	
+        /**
+        * Destructor.
+        */
+        virtual ~CIrMtmUiData();
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+    public: // Functions from base classes
+
+        /**
+        * From CBaseMtmUiData function query.
+        * @param aOperationId Id for function.
+        * @param aContext messaging store entry.
+        * @return TInt error code.
+        */
+	    virtual TInt OperationSupportedL(
+            TInt aOperationId, 
+            const TMsvEntry& aContext) const;
+
+        /**
+        * From CBaseMtmUiData MTM capability check.
+        * @param aCapability Uid for message type.
+        * @param aResponse response for capability check.
+        * @return TInt error code.
+        */
+	    virtual TInt QueryCapability(
+            TUid aCapability, 
+            TInt& aResponse) const;
+
+        /**
+        * From CBaseMtmUiData MTM related context icons.
+        * @param aContext Messaging entry refence.
+        * @param aStateFlags Flags for icon.
+        * @return TInt error code.
+        */
+	    virtual const CBitmapArray& ContextIcon(
+            const TMsvEntry& aContext, 
+            TInt aStateFlags) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aParent Messaging entry refence.
+        * @param aNewEntry Messaging entry refence(created entry).
+        * @param aReasonResourceId ResourceID.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCreateEntryL(
+            const TMsvEntry& aParent, 
+            TMsvEntry& aNewEntry, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanReplyToEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanForwardEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanEditEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanViewEntryL(const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanOpenEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCloseEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanDeleteFromEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanDeleteServiceL(
+            const TMsvEntry& aService, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCopyMoveToEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+	    virtual TBool CanCopyMoveFromEntryL(
+            const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @param aReasonResourceId Resource id.
+        * @return TBool inform that mtm can provice function or not.
+        */
+        virtual TBool CanCancelL(const TMsvEntry& aContext, 
+            TInt& aReasonResourceId) const;
+
+        /**
+        * From CBaseMtmUiData Provide context-specific function information.
+        * @param aContext Messaging entry refence.
+        * @return HBufC* Statustext for sending.
+        */
+        virtual HBufC* StatusTextL(const TMsvEntry& aContext) const;
+
+    protected:  // Functions from base classes
+
+        /**
+        * From CBaseMtmUiData Populate icon array
+        */
+	    virtual void PopulateArraysL();
+
+        /**
+        * From CBaseMtmUiData gets resource filename.
+        */
+	    virtual void GetResourceFileName(TFileName& aFileName) const;
+
+    protected: 
+
+        /**
+        * C++ default constructor.
+        */
+        CIrMtmUiData(CRegisteredMtmDll& aRegisteredDll);
+
+    protected: // New functions
+
+        /**
+        * Checks is the entry valid.
+        * @param aContext reference to the entry.
+        * @return TBool 
+        */
+	    TBool CheckEntry(const TMsvEntry& aContext) const;
+
+	};
+
+#endif // CIRMTMUIDATA_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmui.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,705 @@
+/*
+* Copyright (c) 2002 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: 
+*      CIrMtmui class
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "irmtmui.h"
+#include "debug.h"
+
+#ifdef NO101APPDEPFIXES_NEW
+#include <app/ircmtm.h>
+#endif //NO101APPDEPFIXES_NEW
+
+#include <mtmuidef.hrh>
+#include <mtclreg.h>
+#include <obexutilsuilayer.h>
+#include <Obexutils.rsg>
+#include <msvuids.h>
+#include <msvids.h>
+#include <obexconstants.h>
+#include <btnotif.h>        	// Notifier UID's
+#include <aknnotewrappers.h> 	//For notifier
+#include <featmgr.h>
+#include <secondarydisplay/obexutilssecondarydisplayapi.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CIrMtmUi::CIrMtmUi(CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll)
+    :   CBaseMtmUi(aBaseMtm, aRegisteredMtmDll)
+    {
+    }
+
+// Two-phased constructor.
+CIrMtmUi* CIrMtmUi::NewL(
+    CBaseMtm& aBaseMtm, 
+    CRegisteredMtmDll& aRegisteredMtmDll)
+    {
+    CIrMtmUi* self=new(ELeave) CIrMtmUi(aBaseMtm, aRegisteredMtmDll);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// Destructor
+CIrMtmUi::~CIrMtmUi()
+    {
+    delete iClientRegistry;
+    }
+
+
+// Symbian OS default constructor can leave.
+void CIrMtmUi::ConstructL()
+    {
+    // --- Make sure base class correctly constructed ---
+    CBaseMtmUi::ConstructL();
+    TObexUtilsUiLayer::ReadResourceL( iConnectingText, R_IR_CONNECTING );
+    TObexUtilsUiLayer::ReadResourceL( iSendingText, R_IR_SENDING_DATA );
+    iCurrentlySending = EFalse;
+    }
+
+// ---------------------------------------------------------
+// GetResourceFileName(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+void CIrMtmUi::GetResourceFileName( TFileName& aFileName ) const
+    { 
+    FLOG( _L( "[CIrMtmUi] CIrMtmUi: GetResourceFileName\t" ) );
+    aFileName = KObexUtilsFileDrive;
+    aFileName += KDC_RESOURCE_FILES_DIR;
+    aFileName += KObexUtilsResourceFileName;
+    }
+
+// ---------------------------------------------------------
+// QueryCapability(TUid aCapability, TInt& aResponse)
+// return capability of mtm.
+// ---------------------------------------------------------
+//
+TInt CIrMtmUi::QueryCapability(TUid aCapability, TInt& aResponse)
+    {  // Querying of menu availablility is done in syni.
+    FLOG( _L( "[IRU] CIrMtmUi: QueryCapability\t" ) );
+    if (aCapability.iUid == KUidMsvMtmUiQueryCanPrintMsgValue)
+        {
+        aResponse=ETrue;
+        return KErrNone;
+        }
+    return CBaseMtmUi::QueryCapability(aCapability, aResponse);
+    }
+
+// ---------------------------------------------------------
+// InvokeSyncFunctionL(...)
+// Invoke sync -function from BaseMTM.
+// ---------------------------------------------------------
+//
+void CIrMtmUi::InvokeSyncFunctionL(
+    TInt aFunctionId, 
+    const CMsvEntrySelection& aSelection, 
+    TDes8& aParameter)
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: InvokeSyncFunctionL\t" ) );
+    CBaseMtmUi::InvokeSyncFunctionL(aFunctionId, aSelection, aParameter);
+    }
+
+
+// ---------------------------------------------------------
+// CreateL(...)
+// Entry creation forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CreateL(
+    const TMsvEntry& /*aEntry*/,
+    CMsvEntry& /*aParent*/, 
+    TRequestStatus& /*aStatus*/)
+    {
+    // Entries created through utility functions.
+    User::Leave(KErrNotSupported);  
+    return NULL;
+    }
+
+
+// ---------------------------------------------------------
+// OpenL(TRequestStatus& aStatus)
+// handles opening entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::OpenL(TRequestStatus& aStatus)
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: OpenL\t" ) );
+    const TMsvEntry& context=iBaseMtm.Entry().Entry();
+    const TUid type(context.iType);
+
+    if ( (type==KUidMsvMessageEntry) &&  
+         ((context.Parent()==KMsvSentEntryIdValue)
+         ||(context.Parent()==KMsvGlobalInBoxIndexEntryIdValue))
+       )
+        {
+        // Message is in the sent folder, so can't be edited
+        return ViewL(aStatus);
+        }
+
+    return EditL(aStatus);
+    }
+
+// ---------------------------------------------------------
+// OpenL(...)
+// handles opening entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::OpenL(
+    TRequestStatus& aStatus, 
+    const CMsvEntrySelection& aSelection)
+    {
+    iBaseMtm.Entry().SetEntryL(aSelection.At(0));
+    return OpenL(aStatus);
+    }
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CloseL(TRequestStatus& aStatus)
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: CloseL\t" ) );
+    CMsvCompletedOperation* op=CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus);
+    return op;
+    }
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CloseL(
+    TRequestStatus& aStatus, 
+    const CMsvEntrySelection& aSelection)
+    {
+    iBaseMtm.Entry().SetEntryL(aSelection.At(0));
+    return CloseL(aStatus);
+    }
+
+// ---------------------------------------------------------
+// EditL(TRequestStatus& aStatus)
+// Handles message sending.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::EditL(TRequestStatus& aStatus)
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: EditL\t" ) );
+    switch( iBaseMtm.Entry().Entry().iType.iUid )
+        {
+        case KUidMsvMessageEntryValue:
+            {
+            return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );
+            /* Infrared is not supported anymore. Implementation for sending over Infrared is left for reference:
+            ( add #include <MuiuMsvProgressReporterOperation.h> to the included files )
+            ( add constants:
+                const TInt KIrMtmUiConnectionTimeout     = 20000000;
+                const TInt KIrMtmUiReceiveTimeout        = 0; )
+            code starts here:
+
+            if( iBaseMtm.Entry().Entry().Parent() != KMsvDraftEntryId &&
+               iBaseMtm.Entry().Entry().Parent() != KMsvGlobalOutBoxIndexEntryId )
+                {
+                //   Edit/"use" entries in the Inbox
+                return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );
+                }
+            else
+                {
+                FeatureManager::InitializeLibL();                    	
+                if(!FeatureManager::FeatureSupported(KFeatureIdIrda))
+    			    {
+   					FLOG(_L("[IRSS]\t FeatMgr doesn't find IrDA, show not_supported "));
+	    			RNotifier notifier;    
+	    			User::LeaveIfError( notifier.Connect() );
+					TBTGenericInfoNotiferParamsPckg paramsPckg;
+					paramsPckg().iMessageType=EIRNotSupported;		
+		            TInt status = notifier.StartNotifier(KBTGenericInfoNotifierUid, paramsPckg);
+	                if ( status != KErrNone )
+	                    {
+	                    FTRACE(FPrint(_L("[IRSS]\t void CIrMtmUi::EditL()  ERROR: StartNotifier() failed. Code: %d "), status));
+	                    }	    
+	                notifier.Close();    	
+	                User::Leave(KErrNone);
+    	            }    	
+    		    FeatureManager::UnInitializeLib();
+                CIrClientMtm::STimeouts timeouts;
+                timeouts.iConnectTimeout = KIrMtmUiConnectionTimeout;
+                timeouts.iPutTimeout     = KIrMtmUiReceiveTimeout;
+
+                TPckgBuf<CIrClientMtm::STimeouts> timeoutBuf( timeouts );
+
+                CMsvEntrySelection* sel = new( ELeave ) CMsvEntrySelection();
+                CleanupStack::PushL( sel );
+
+                sel->AppendL( BaseMtm().Entry().EntryId() );
+
+                CMsvOperationWait* waiter = CMsvOperationWait::NewLC();
+
+                TBuf<KObexUtilsMaxCharToFromField> toFrom;
+                TInt resourceId = R_IR_SEND_OUTBOX_SENDING;
+                TObexUtilsUiLayer::ReadResourceL( toFrom, resourceId );
+
+                TMsvEntry newTEntry( iBaseMtm.Entry().Entry() );
+                newTEntry.iDetails.Set( toFrom );
+                newTEntry.SetVisible( ETrue );
+                newTEntry.SetInPreparation( ETrue );
+
+                iBaseMtm.Entry().ChangeL( newTEntry );
+
+                CMsvEntry* entry = 
+                    BaseMtm().Session().GetEntryL( KMsvDraftEntryId );
+
+                CleanupStack::PushL( entry );
+
+                CMsvOperation* moveOp = entry->MoveL(
+                    *sel, 
+                    KMsvGlobalOutBoxIndexEntryId, 
+                    waiter->iStatus );
+
+                CleanupStack::PopAndDestroy(entry);
+                
+                waiter->Start();
+                CActiveScheduler::Start();
+                delete moveOp;
+
+                CleanupStack::PopAndDestroy(waiter);
+
+                TInt dialogIndex =((R_IR_SENDING_DATA & KResourceNumberMask) - KFirstResourceOffset) + KEnumStart;
+                CMsvProgressReporterOperation* reporter = 
+                    CMsvProgressReporterOperation::NewL( Session(), aStatus, dialogIndex, KObexUtilsCategory);
+                CleanupStack::PushL( reporter );
+
+                CMsvOperation* op = BaseMtm().InvokeAsyncFunctionL(
+                    CIrClientMtm::EIrcCmdSend, 
+                    *sel, 
+                    timeoutBuf, 
+                    reporter->RequestStatus() );
+
+                // ownership of op transfered to reporter
+                reporter->SetOperationL( op ); 
+                reporter->SetTitleL(iConnectingText);
+                aStatus = KRequestPending;
+                
+                CleanupStack::Pop(reporter);
+                CleanupStack::PopAndDestroy(sel);
+                // ownership of reporter transfered to caller
+                return reporter; 
+                }
+
+                End of reference implementation for sending over Infrared:
+                */
+            }
+        case KUidMsvServiceEntryValue:
+        case KUidMsvAttachmentEntryValue:
+        case KUidMsvFolderEntryValue:
+            {
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+
+    CMsvCompletedOperation* op = CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus );
+    FLOG( _L( "[IrMtmUi] CIrMtmUi: EditL Done\t" ) );
+    
+    aStatus = KRequestPending;
+    return op;
+    }
+
+// ---------------------------------------------------------
+// EditL(...)
+// Handles message sending using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::EditL( TRequestStatus& aStatus, 
+                               const CMsvEntrySelection& aSelection)
+    {
+    iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+    return EditL( aStatus );
+    }
+
+// ---------------------------------------------------------
+// ViewL(TRequestStatus& aStatus)
+// Handles viewing of received object.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::ViewL( TRequestStatus& aStatus )
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: ViewL\t" ) );
+    return LaunchEditorApplicationL(aStatus, iBaseMtm.Entry().Session());
+    }
+
+// ---------------------------------------------------------
+// ViewL(...)
+// Handles viewing of received object using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::ViewL( TRequestStatus& aStatus, 
+                               const CMsvEntrySelection& aSelection )
+    {
+    iBaseMtm.Entry().SetEntryL(aSelection.At(0));
+    return ViewL(aStatus);
+    }
+
+// ---------------------------------------------------------
+// CopyFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CopyFromL( const CMsvEntrySelection& /*aSelection*/, 
+                                   TMsvId /*aTargetId*/, 
+                                   TRequestStatus& /*aStatus*/)
+    {
+    User::Leave(KErrNotSupported);
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// MoveFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::MoveFromL( const CMsvEntrySelection& /*aSelection*/, 
+                                   TMsvId /*aTargetId*/, 
+                                   TRequestStatus& /*aStatus*/)
+    {
+    User::Leave(KErrNotSupported);
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// MoveToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::MoveToL( const CMsvEntrySelection& /*aSelection*/, 
+                                 TRequestStatus& /*aStatus*/)
+    {
+    User::Leave(KErrNotSupported);
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// CopyToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CopyToL( const CMsvEntrySelection& /*aSelection*/, 
+                                 TRequestStatus& /*aStatus*/ )
+    {
+    User::Leave(KErrNotSupported);
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// DisplayProgressSummary(const TDesC8& aProgress) const
+// calls leaving DisplayProgressSummaryL -function and
+// traps the error.
+// ---------------------------------------------------------
+//
+TInt CIrMtmUi::DisplayProgressSummary( const TDesC8& aProgress ) const
+    {
+    FLOG( _L( "[IRU] CIrMtmUi: DisplayProgressSummary\t" ) );
+    TInt retVal = KErrNone;
+    TRAP( retVal, retVal = DisplayProgressSummaryL( aProgress ) );
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// TInt CIrMtmUi::DisplayProgressSummaryL(const TDesC8& aProgress) const
+// Shows connection summary.
+// ---------------------------------------------------------
+//
+TInt CIrMtmUi::DisplayProgressSummaryL( const TDesC8& aProgress ) const
+    {
+    #ifndef NO101APPDEPFIXES_NEW
+    (void) aProgress;
+    #endif //NO101APPDEPFIXES_NEW
+    
+    #ifdef NO101APPDEPFIXES_NEW
+    FLOG( _L( "[IRU] CIrMtmUi: DisplayProgressSummaryL\t" ) );
+    TInt resourceId;
+    if( ( !aProgress.Length() ) || 
+         ( aProgress.Size() == sizeof( TMsvLocalOperationProgress ) ) )
+        {
+        // Probably a CMsvCompletedOperation
+        return KErrCancel;
+        }
+    TPckgBuf<TObexMtmProgress> paramPack;
+    paramPack.Copy( aProgress );
+    TObexMtmProgress& progress = paramPack();
+
+    const TObexMtmProgress::TSendState progressType = progress.iSendState;
+    const TInt error = progress.iError;
+
+    if( error == KErrInUse )
+        {
+        resourceId = R_IR_CANNOT_ESTABLISH;
+        TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+        return KErrNone;
+        }
+
+    switch( progressType )
+        {
+        case TObexMtmProgress::EDisconnected:
+            {
+            // Allowed to send again.
+            CONST_CAST( CIrMtmUi*, this )->iCurrentlySending = EFalse;
+            resourceId = R_IR_DATA_SENT;
+            TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+            break;
+            }
+        case TObexMtmProgress::ESendError:
+            {
+            if( error == KErrIrObexClientNoDevicesFound )
+                {
+                resourceId = R_IR_CANNOT_ESTABLISH;
+                TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+                }
+            else
+                {
+                resourceId = R_IR_SENDING_FAILED;
+                TObexUtilsUiLayer::ShowErrorNoteL( resourceId );
+                }
+            break;
+            }
+        case TObexMtmProgress::ESendComplete:
+            {
+            break;
+            }
+        case TObexMtmProgress::EInitialise:
+        case TObexMtmProgress::EConnect:
+        case TObexMtmProgress::EConnectAttemptComplete:
+        case TObexMtmProgress::ESendObject:
+        case TObexMtmProgress::ESendNextObject:
+            {
+            return KErrCancel;
+            }
+        case TObexMtmProgress::EUserCancelled:
+            {
+            return KErrCancel;
+            }
+        default:
+            {
+            return KErrCancel;
+            }
+        }
+    FLOG( _L( "[IRU] CIrMtmUi: DisplayProgressSummaryL Done\t" ) );
+    #endif //NO101APPDEPFIXES_NEW
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// GetProgress(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+TInt CIrMtmUi::GetProgress( const TDesC8& aProgress,
+                           TBuf<EProgressStringMaxLen>& aReturnString, 
+                           TInt& aTotalEntryCount, 
+                           TInt& aEntriesDone,
+                           TInt& aCurrentEntrySize, 
+                           TInt& aCurrentBytesTrans ) const
+    {
+    #ifndef NO101APPDEPFIXES_NEW
+    (void) aProgress;
+    (void) aReturnString;
+    (void) aTotalEntryCount;
+    (void) aEntriesDone;
+    (void) aCurrentEntrySize;
+    (void) aCurrentBytesTrans;	
+    #endif //NO101APPDEPFIXES_NEW
+    
+    #ifdef NO101APPDEPFIXES_NEW
+    FLOG( _L( "[CIrMtmUi] CIrMtmUi: GetProgress\t" ) );
+    TPckgBuf<TObexMtmProgress> paramPack;
+    paramPack.Copy( aProgress );
+    TObexMtmProgress& progress = paramPack();
+    const TObexMtmProgress::TSendState progressType = progress.iSendState;
+    aTotalEntryCount    = progress.iTotalEntryCount;
+    aEntriesDone        = progress.iEntriesDone;
+    aCurrentEntrySize   = progress.iCurrentEntrySize; 
+    aCurrentBytesTrans  = progress.iCurrentBytesTrans;
+
+    if( aTotalEntryCount > 1 ) // This is for progress bar multisending
+        {
+        aCurrentEntrySize = 0;
+        }
+    switch( progressType )
+        {
+        case TObexMtmProgress::ENullOp:
+        case TObexMtmProgress::ESendError:
+            {
+            aReturnString = KNullDesC;
+            break;
+            }
+        case TObexMtmProgress::EInitialise:
+        case TObexMtmProgress::EConnect:
+        case TObexMtmProgress::EConnectAttemptComplete:
+            {
+            aReturnString = iConnectingText;
+            break;
+            }
+        case TObexMtmProgress::ESendObject:
+        case TObexMtmProgress::ESendNextObject:
+        case TObexMtmProgress::ESendComplete:
+            {
+            aReturnString = iSendingText;
+            break;
+            }
+        case TObexMtmProgress::EDisconnected:
+            {
+            break;
+            }
+        default:
+            {
+            return KErrCancel;
+            }
+        }
+    FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetProgress Done\t" ) );
+    #endif //NO101APPDEPFIXES_NEW
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// LaunchEditorApplicationL(...)
+// Launch viewer for selected object. The first is object's 
+// recognition(document handler).
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::LaunchEditorApplicationL( TRequestStatus& aStatus,
+                                                  CMsvSession& aSession)
+    {
+	FLOG( _L( "[CIrMtmUi] CIrMtmUi: LaunchEditorApplicationL\t" ) );
+	CMsvEntry* message;
+	message = &iBaseMtm.Entry();    
+	return TObexUtilsUiLayer::LaunchEditorApplicationOperationL( aSession, message, aStatus );
+    }
+
+
+// ---------------------------------------------------------
+// GetClientMtmLC(TUid aMtmType)
+// Handles MTM registration.
+// ---------------------------------------------------------
+//
+CBaseMtm* CIrMtmUi::GetClientMtmLC( TUid aMtmType )
+    {
+    if (!iClientRegistry)
+        {
+        iClientRegistry = CClientMtmRegistry::NewL( Session() );
+        }
+    CBaseMtm* mtm=iClientRegistry->NewMtmL( aMtmType );
+    CleanupStack::PushL( mtm );
+    return mtm;
+    }
+
+// ---------------------------------------------------------
+// DeleteFromL(TUid aMtmType)
+// passes entry selection to Base for deletion.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::DeleteFromL( const CMsvEntrySelection& aSelection, 
+                                     TRequestStatus& aStatus)
+
+    {
+    return CBaseMtmUi::DeleteFromL(aSelection, aStatus);
+    }
+
+// ---------------------------------------------------------
+// DeleteServiceL(...)
+// IR has no service, just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::DeleteServiceL( const TMsvEntry& /*aService*/, 
+                                        TRequestStatus& aStatus)
+
+    {
+    return CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus);
+    }
+
+// ---------------------------------------------------------
+// ReplyL(...)
+// Reply is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::ReplyL( TMsvId /*aDestination*/, 
+                                TMsvPartList /*aPartlist*/, 
+                                TRequestStatus& /*aCompletionStatus*/)
+    {
+    User::Leave(KErrNotSupported);
+    // Return value is needed for removing compilation errors
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// ForwardL(...)
+// Forward is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::ForwardL( TMsvId /*aDestination*/, 
+                                  TMsvPartList /*aPartList*/, 
+                                  TRequestStatus& /*aCompletionStatus*/ )
+    {
+    User::Leave(KErrNotSupported);
+    // Return value is needed for removing compilation errors
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// CancelL(...)
+// No MS way of sending a message from the outbox, so no need to cancel.
+// Just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CIrMtmUi::CancelL( TRequestStatus& aStatus, 
+                                 const CMsvEntrySelection& /*aSelection*/ )
+    { 
+    return CMsvCompletedOperation::NewL(
+        Session(), 
+        Type(), 
+        KNullDesC8, 
+        KMsvLocalServiceIndexEntryId, 
+        aStatus, 
+        KErrNone);
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmuidata.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,414 @@
+/*
+* Copyright (c) 2002 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: 
+*     Class CIrMtmUiData
+*
+*/
+
+
+// INCLUDE FILES
+#include "irmtmuidata.h"
+#include "irmtmui.h"
+#include <app/irmsgtypeuid.h>
+#include <mtclbase.h>
+#include <msvuids.h>
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mtmdef.hrh> //kuidmtmquerymaxbodysizevalue etc
+#else
+#include <mtmdef.hrh> //kuidmtmquerymaxbodysizevalue etc
+#include <mtmuidsdef.hrh> //kuidmtmquerymaxbodysizevalue etc
+#endif
+#include <Obexutils.rsg>
+#include <obexutilsmessagehandler.h>
+#include "debug.h"
+
+//CONSTANTS
+const TInt KIrMtmUiDataMsgEditorAppValue      = 0x00000000;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+CIrMtmUiData* CIrMtmUiData::NewL(CRegisteredMtmDll& aRegisteredDll)
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CIrMtmUiData\t" ) );
+	CIrMtmUiData* self=new(ELeave) CIrMtmUiData(aRegisteredDll);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// Symbian OS default constructor can leave.
+void CIrMtmUiData::ConstructL()
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: ConstructL\t" ) );
+    CBaseMtmUiData::ConstructL();
+    TObexUtilsMessageHandler::CreateDefaultMtmServiceL(KUidMsgTypeIrUID);
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: ConstructL done\t" ) );
+	}
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CIrMtmUiData::CIrMtmUiData(CRegisteredMtmDll& aRegisteredDll)
+	:       CBaseMtmUiData(aRegisteredDll)
+	{   
+	}
+
+
+// Destructor
+CIrMtmUiData::~CIrMtmUiData()
+	{ 
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: ~CIrMtmUiData\t" ) );
+	}
+
+
+// ---------------------------------------------------------
+// OperationSupportedL(...)
+// No Ir-specific operations added to MS menu.
+// ---------------------------------------------------------
+//
+TInt CIrMtmUiData::OperationSupportedL(
+    TInt /*aOperationId*/, 
+    const TMsvEntry& /*aContext*/) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: OperationSupportedL\t" ) );
+	return TObexUtilsUiLayer::OperationNotSupported();
+	}
+
+// ---------------------------------------------------------
+// QueryCapability(...)
+// MTM query capability
+// ---------------------------------------------------------
+//
+TInt CIrMtmUiData::QueryCapability(
+    TUid aCapability, 
+    TInt& aResponse ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: QueryCapability\t" ) );
+	switch( aCapability.iUid )
+		{
+	    // --- Supported valued capabilities ---
+	    case KUidMtmQueryMaxBodySizeValue:
+            {
+		    aResponse = KMaxTInt;
+		    break;
+            }
+	    case KUidMtmQueryMaxTotalMsgSizeValue:
+            {
+		    aResponse = KMaxTInt;
+		    break;
+            }
+	    case KUidMsvMtmQueryEditorUidValue:
+            {
+		    aResponse = KIrMtmUiDataMsgEditorAppValue;
+		    break;
+            }
+        /* Infrared is not supported anymore. Implementation for sending over Infrared is left for reference:
+        ( add #include <app/extendedmtmids.hrh> to the included files )
+        code starts here:
+
+        case KUidMsvMtmQuerySupportLinks:
+            {
+            aResponse = ETrue;
+            break;
+            }
+
+        End of reference implementation for sending over Infrared:
+        */
+	    case KUidMtmQuerySupportAttachmentsValue:
+	    case KUidMtmQueryCanSendMsgValue:
+            {
+		    break;
+            }
+	    case KUidMtmQuerySupportedBodyValue:    
+	    default:
+            {
+		    return KErrNotSupported;
+            }
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------
+// CBaseMtmUiData::CBitmapArray& CIrMtmUiData::ContextIcon(...)
+// Handles received msg icon.
+// ---------------------------------------------------------
+//
+const CBaseMtmUiData::CBitmapArray& CIrMtmUiData::ContextIcon(
+     const TMsvEntry& aContext, 
+     TInt /*aStateFlags*/) const
+
+	{
+	TInt icon = TObexUtilsUiLayer::ContextIcon( aContext, EInfrared );
+	return *iIconArrays->At( icon/2 ); 
+	}
+
+// ---------------------------------------------------------
+// PopulateArraysL()
+// Populates bitmap array 
+// ---------------------------------------------------------
+//
+void CIrMtmUiData::PopulateArraysL()
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: PopulateArraysL\t" ) );
+
+	TObexUtilsUiLayer::CreateIconsL( KUidMsgTypeIrUID, iIconArrays );
+	}
+
+// ---------------------------------------------------------
+// GetResourceFileName(TFileName& aFileName) const
+// Gives resource filename.
+// ---------------------------------------------------------
+//
+void CIrMtmUiData::GetResourceFileName(TFileName& aFileName) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: GetResourceFileName\t" ) );
+    aFileName = KObexUtilsFileDrive;
+    aFileName += KDC_RESOURCE_FILES_DIR;
+    aFileName += KObexUtilsResourceFileName;
+	}
+
+// ---------------------------------------------------------
+// CanCreateEntryL(...)
+// Checks if it is possible to create entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanCreateEntryL(
+    const TMsvEntry& aParent, 
+    TMsvEntry& aNewEntry, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanCreateEntryL\t" ) );
+	aReasonResourceId = 0;
+	if( CheckEntry( aNewEntry ) )
+		{
+        // --- Can create messages in local folders ---
+		return ( aParent.iMtm.iUid == KMsvLocalServiceIndexEntryIdValue );
+		}
+	// --- Can't create other types ---
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanOpenEntryL(...)
+// Checks if it is possible to open entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanOpenEntryL(
+    const TMsvEntry& aContext, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanOpenEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvMessageEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCloseEntryL(...)
+// Checks if it is possible to close entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanCloseEntryL(
+    const TMsvEntry& aContext, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanCloseEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvServiceEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanViewEntryL(...)
+// Checks if it is possible to view entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanViewEntryL(
+    const TMsvEntry& aContext, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanViewEntryL\t" ) );
+	if( CheckEntry( aContext ) )
+		{
+		if( aContext.iType.iUid == KUidMsvMessageEntryValue )
+			{
+			aReasonResourceId = 0;
+			return ETrue;
+			}
+		}
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanEditEntryL(...)
+// Checks if it is possible to edit entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanEditEntryL(
+    const TMsvEntry& aContext, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanEditEntryL\t" ) );
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	if( CheckEntry( aContext ) )
+		{
+		if ( ( aContext.iType.iUid == KUidMsvMessageEntryValue ) || 
+             ( aContext.iType.iUid == KUidMsvFolderEntryValue ) )
+			{
+			aReasonResourceId=0;
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanDeleteServiceL(...)
+// Checks if it is possible to delete service.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanDeleteServiceL(
+    const TMsvEntry& /*aService*/, 
+    TInt& aReasonResourceId ) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CanDeleteServiceL\t" ) );
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+    return EFalse; 
+	}
+
+// ---------------------------------------------------------
+// CanDeleteFromEntryL(...)
+// Checks if it is possible to delete from entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanDeleteFromEntryL(
+    const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCopyMoveToEntryL(...)
+// Checks if it is possible to move to entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanCopyMoveToEntryL(
+    const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanCopyMoveFromEntryL(...)
+// Checks if it is possible to move from entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanCopyMoveFromEntryL(
+    const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CanReplyToEntryL(...)
+// Checks if it is possible to reply to entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanReplyToEntryL(
+    const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;	// Not Ok to do
+	}
+
+// ---------------------------------------------------------
+// CanForwardEntryL(...)
+// Checks if it is possible to forward entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanForwardEntryL(
+    const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId ) const
+	{
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;	// Not Ok to do
+	}
+
+// ---------------------------------------------------------
+// CheckEntry(...)
+// Checks is the entry valid.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CheckEntry(const TMsvEntry& aContext) const
+	{
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: CheckEntry\t" ) );
+	return( ( aContext.iType.iUid == KUidMsvMessageEntryValue ) && 
+            ( aContext.iMtm       == KUidMsgTypeIrUID ) );
+	}
+
+// ---------------------------------------------------------
+// CanCancelL(...)
+// Checks if it is possible to cancel entry.
+// ---------------------------------------------------------
+//
+TBool CIrMtmUiData::CanCancelL(
+    const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+    {
+    // No way of sending a message from the outbox, so no need to cancel.
+	aReasonResourceId = TObexUtilsUiLayer::OperationNotSupported();
+	return EFalse;
+    }
+
+// ---------------------------------------------------------
+// StatusTextL(...)
+// Returns status text when sending message(outbox).
+// ---------------------------------------------------------
+//
+HBufC* CIrMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const
+	{  
+    FLOG( _L( "[CIrMtmUiData] CIrMtmUiData: StatusTextL\t" ) );
+    TBuf<80> buffer;
+    TInt resourceId = R_IR_SEND_PROGRESS_SENDING;
+	TObexUtilsUiLayer::ReadResourceL( buffer, resourceId );
+    HBufC* ptr;
+    ptr = buffer.AllocL();
+    return ptr;
+	}
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/src/irmtmuidll.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2002 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: 
+*     DLL interface
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "irmtmuidata.h"
+#include "irmtmui.h"
+#include "debug.h"
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+//
+// ---------------------------------------------------------
+// NewMtmUiL Creates new MTM UI
+// Returns: CBaseMtmUi pointer to created mtm
+//
+EXPORT_C CBaseMtmUi* NewMtmUiL( CBaseMtm& aMtm, CRegisteredMtmDll& aRegisteredDll )
+	{
+    FLOG( _L( "CBaseMtmUi* NewMtmUiL\t" ));
+	return CIrMtmUi::NewL( aMtm, aRegisteredDll );
+	}
+
+//
+// ---------------------------------------------------------
+// NewMtmUiL Creates new MTM UI Data layer
+// Returns: CBaseMtmUiData pointer to created mtm
+//
+EXPORT_C CBaseMtmUiData* NewMtmUiDataLayerL( CRegisteredMtmDll& aRegisteredDll )
+	{    
+    FLOG( _L( "CBaseMtmUiData* NewMtmUiDataLayerL\t" ));
+	return CIrMtmUiData::NewL( aRegisteredDll );
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/data/101F8636.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2005 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:  PC Connectivity Plug-in resource file
+*
+*/
+
+
+#include "registryinfo.rh"
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x101F8636;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x101F7C8C;
+			implementations = 
+				{
+				// Info for CSConPCConnplugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x101F8636;
+					version_no = 1;
+					display_name = "Obex Services";
+					default_data = "OBEX/BT||OBEX/IrDA";
+					
+					// 
+					// opaque_data contains parameters used by following API calls in SRCS:
+					// 1. Setup USB interface string descriptor in Unicode;
+					// 2. TInt CObex::SetLocalWho(const TDesC8& aInfo);
+					// 3. TInt CBTConnection::RegisterSecuritySettingsL( TUint aService,
+					//						 TInt  aProtocol,
+					//						 TInt  aChannel,
+					//						 TBool aAuthenticate,
+					//						 TBool aAuthorise,
+					//						 TBool aEncrypt );
+					// opaque_data = "@0||@1||@2||@3||@4||@5||@6"
+					// @0 aStrDesc		e.g. "PC Connectivity"
+					// @1 aInfo			e.g. KFolderBrowsingID, "\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09"
+					// @2 aService		e.g. KBTSecurityUidFileTransfer, 0x1106
+					// @3 aProtocol		e.g. KSolBtRFCOMM, 0x1013
+					// @4 aAuthenticate	e.g. EFalse, 0
+					// @5 aAuthorise	e.g. EFalse, 0
+					// @6 aEncrypt		e.g. EFalse, 0
+					//
+					opaque_data = "OBEX|"\
+					              "||"\
+					               "|0x1105|"\
+					               "|0x1013|"\
+					               "|0|"\
+					               "|1|"\
+					               "|0|"\
+					               "|0xfffe|"\
+					               "|0xfffe";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a MtmUiServerBluetooth.
+*
+*/
+
+
+PRJ_PLATFORMS
+
+
+PRJ_MMPFILES
+obexserviceopp.mmp
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/group/obexserviceopp.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2002 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: 
+*    This is project specification file for the mtmuiserverbluetooth.
+*     
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+TARGET        obexserviceopp.dll
+CAPABILITY    CAP_GENERAL_DLL
+TARGETTYPE    PLUGIN
+UID           0x10009d8d 0x101F8636
+VENDORID      VID_DEFAULT
+
+SOURCEPATH    ../src
+SOURCE        obexserviceopp.cpp
+SOURCE        oppcontroller.cpp 
+
+START RESOURCE  ../data/101F8636.rss
+  TARGET        obexserviceopp.rsc
+END
+
+
+USERINCLUDE   ../inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY         obexutils.lib 
+LIBRARY         euser.lib
+LIBRARY         efsrv.lib
+LIBRARY 		servicehandler.lib 
+LIBRARY			avkon.lib
+LIBRARY         irobex.lib          // For Object exchange
+LIBRARY	    	imageconversion.lib
+LIBRARY         bafl.lib
+LIBRARY         ecom.lib
+LIBRARY         sysutil.lib
+LIBRARY			esock.lib
+LIBRARY			charconv.lib aknnotify.lib eiksrv.lib
+LIBRARY         platformenv.lib
+LIBRARY 		bluetooth.lib                       // Bluetooth libraries
+LIBRARY 		btdevice.lib                        // Bluetooth library
+LIBRARY			btmanclient.lib
+
+//Bteng APIs
+LIBRARY 		btengdevman.lib				//btengdevman.dll
+LIBRARY 		btengsettings.lib			//btengsettings.dll
+LIBRARY 		btengconnman.lib			//btengconnman.dll
+
+DEBUGLIBRARY	flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/inc/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* 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:  Logging definition
+*
+*/
+
+
+#ifndef PRJ_LOGGING_H
+#define PRJ_LOGGING_H
+
+#include "debugconfig.h"
+
+#ifdef PRJ_ENABLE_TRACE
+
+#ifdef PRJ_FILE_TRACE
+#include <flogger.h>
+#else
+#include <e32debug.h>
+#endif
+
+const TInt KMaxLogLineLength = 512;
+
+#define KPRINTERROR        0x00000001 // Tracing level: error
+#define KPRINTINFO        0x00000002 // Tracing level: function trace
+#define KPRINTSTATE        0x00000004 // Tracing level: state machine info
+#define KPRINTWARNING   0x00000008 // Tracing level: warning
+
+const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING;
+
+NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
+    {
+public:
+    void Overflow(TDes16& /*aDes*/) {}
+    };
+
+NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
+    {
+public:
+    void Overflow(TDes8& /*aDes*/) {}
+    };
+
+inline void Trace(TRefByValue<const TDesC16> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TBuf16<KMaxLogLineLength> theFinalString;
+    theFinalString.Append(KTracePrefix16);
+    TOverflowTruncate16 overflow;
+    theFinalString.AppendFormatList(aFmt,list,&overflow);
+    RDebug::Print(theFinalString);
+#endif
+    }
+
+inline void Trace(TRefByValue<const TDesC8> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list, aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TOverflowTruncate8 overflow;
+    TBuf8<KMaxLogLineLength> buf8;
+    buf8.Append(KTracePrefix8);
+    buf8.AppendFormatList(aFmt, list, &overflow);
+    TBuf16<KMaxLogLineLength> buf16(buf8.Length());
+    buf16.Copy(buf8);
+    TRefByValue<const TDesC> tmpFmt(_L("%S"));
+    RDebug::Print(tmpFmt, &buf16);
+#endif
+    }
+
+inline void TracePanic(
+    char* aFile, 
+    TInt aLine,
+    TInt aPanicCode,
+    const TDesC& aPanicCategory)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KPanicPrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName);
+    Trace(buf);
+    User::Panic(aPanicCategory, aPanicCode); 
+    }
+
+inline void TraceLeave(char* aFile, TInt aLine, TInt aReason)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KLeavePrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName);
+    Trace(buf);
+    User::LeaveIfError(aReason);
+    }
+
+#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;}
+
+#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;}
+
+#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;}
+
+#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;}
+
+#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;}
+
+#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);}
+
+#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory)
+
+#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}}
+
+#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}}
+
+#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}}
+
+#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}}
+
+#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}}
+
+#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}}
+
+#define TRACE_ONLY(p) p
+
+#else // PRJ_ENABLE_TRACE not defined
+
+#define TRACE_INFO(p)
+
+#define TRACE_ERROR(p)
+
+#define TRACE_STATE(p)
+
+#define TRACE_WARNING(p)
+
+#define TRACE_INFO_SEG(p)
+
+#define TRACE_ASSERT(GUARD, CODE)
+
+#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);}
+
+#define LEAVE_IF_ERROR(REASON) {static_cast<void>(User::LeaveIfError(REASON));}
+
+#define LEAVE(REASON) {static_cast<void>(User::Leave(REASON));}
+
+#define TRACE_FUNC_ENTRY
+
+#define TRACE_FUNC_ENTRY_THIS
+
+#define TRACE_FUNC_EXIT
+
+#define TRACE_FUNC
+
+#define TRACE_FUNC_THIS
+
+#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;}
+
+#define TRACE_ONLY(p)
+
+#endif // PRJ_ENABLE_TRACE
+
+#endif // PRJ_LOGGING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/inc/debugconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_DEBUGCONFIG_H
+#define OBEXSM_DEBUGCONFIG_H
+
+#include "prjconfig.h"
+
+
+/**
+ * Custom logging variations.
+ */
+#ifdef PRJ_FILE_TRACE
+_LIT(KLogFile,"oppreceiveservice.txt");
+_LIT(KLogDir,"locod");
+#endif
+
+#ifdef PRJ_ENABLE_TRACE
+_LIT(KTracePrefix16, "[OPP] ");
+_LIT8(KTracePrefix8, "[OPP] ");
+_LIT8(KFuncFormat8, "><%S");
+_LIT8(KFuncThisFormat8, "><%S, [0x%08X]");
+_LIT8(KFuncEntryFormat8, ">%S");
+_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]");
+_LIT8(KFuncExitFormat8, "<%S");
+
+_LIT(KPanicCategory, "OPP");    
+_LIT8(KPanicPrefix8, "PANIC code ");
+_LIT8(KLeavePrefix8, "LEAVE code ");
+#endif
+
+#endif // OBEXSM_DEBUGCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/inc/oppcontroller.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2004 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: 
+*     Class handles Bluetooth OPP reception.
+*
+*
+*/
+
+
+#ifndef OPPCONTROLLER_H
+#define OPPCONTROLLER_H
+
+//  INCLUDES
+
+
+#include <e32base.h>
+#include <obexutilsmessagehandler.h>
+#include <obexutilsuilayer.h>
+#include "obexutilspropertynotifier.h"
+#include <SrcsInterface.h>
+#include "btengdevman.h"
+
+#include <obexutilspropertynotifier.h>
+#include <obexutilsglobalprogressdialog.h>
+
+#include <AiwServiceHandler.h> // The AIW service handler
+
+_LIT( KUniqueTransportName, "RFCOMM" );
+const TInt KBtStartReserveChannel   = 9;
+const TInt KBtEndReserveChannel     = 30;
+
+/**
+*  CBtListenActive
+*  Class to implement IrObex permanent listen
+*/
+class COPPController : public CSrcsInterface, public MObexServerNotify, 
+                       public MObexUtilsPropertyNotifyHandler,
+                       public MGlobalProgressCallback, public MGlobalNoteCallback, 
+                       public MBTEngDevManObserver     
+    {
+public:
+    static COPPController* NewL();
+    ~COPPController();   
+
+private: // from CSrcsInterface
+    TBool IsOBEXActive();
+    void SetMediaType(TSrcsMediaType aMediaType);
+    TInt SetObexServer(CObexServer* aServer);
+
+private: // from MObexServerNotify
+    void ErrorIndication(TInt aError);
+    void TransportUpIndication();
+    void TransportDownIndication();
+    TInt ObexConnectIndication(const TObexConnectInfo& aRemoteInfo, const TDesC8& aInfo);
+    void ObexDisconnectIndication(const TDesC8& aInfo);
+    CObexBufObject* PutRequestIndication();
+    TInt PutPacketIndication();
+    TInt PutCompleteIndication();
+    CObexBufObject* GetRequestIndication(CObexBaseObject* aRequiredObject);
+    TInt GetPacketIndication();
+    TInt GetCompleteIndication();
+    TInt SetPathIndication(const CObex::TSetPathInfo& aPathInfo, const TDesC8& aInfo);
+    void AbortIndication();
+    
+private: // from MObexUtilsPropertyNotifyHandler
+    void HandleNotifyL(TMemoryPropertyCheckType aCheckType);
+    
+private: // from MGlobalProgressCallback
+    void HandleGlobalProgressDialogL(TInt aSoftkey); 
+    
+private: // from MGlobalNoteCallback
+    void HandleGlobalNoteDialogL(TInt aSoftkey);
+    
+private: // from MBTEngDevManObserver
+    void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray);
+    
+private:
+    COPPController();
+    void ConstructL();
+    
+    void CancelTransfer();
+    void HandlePutRequestL();
+    TInt HandlePutCompleteIndication();
+    void HandleError(TBool aAbort);
+    
+    TBool CheckCapacityL();
+    void LaunchReceivingIndicatorL();
+    inline TBool ReceivingIndicatorActive() const { return (iProgressDialog || iWaitDialog); }
+    void UpdateReceivingIndicator();
+    void CloseReceivingIndicator(TBool aResetDisplayedState = ETrue);
+    TInt GetDriveWithMaximumFreeSpaceL();    
+
+private:
+    enum TObexTransferState
+        {
+        ETransferIdle,
+        ETransferPut,
+        ETransferPutDiskError,
+        ETransferPutInitError,
+        ETransferPutCancel,
+        };
+
+private:
+    CObexServer*                iObexServer;
+    TObexTransferState          iObexTransferState;
+    CObexBufObject*             iObexObject;
+    TInt                        iDrive;
+    TBool                       iListening;
+    CObexUtilsPropertyNotifier* iLowMemoryActiveCDrive;
+    CObexUtilsPropertyNotifier* iLowMemoryActiveMMC;
+    TMsvId                      iMsvIdParent;
+    TMsvId                      iMsvIdAttach;
+    TFileName                   iFullPathFilename;
+    TFileName                   iDefaultFolder;
+    TFileName                   iPreviousDefaultFolder;
+    TFileName                   iCenRepFolder;
+    RFs                         iFs;
+    RFile                       iFile;
+    CBufFlat*                   iBuf;
+    TBool                       iLengthHeaderReceived;
+    TSrcsMediaType              iMediaType;
+    TInt                        iTotalSizeByte;
+    TFileName                   iReceivingFileName;
+    CGlobalProgressDialog*      iProgressDialog;
+    CGlobalDialog*              iWaitDialog;
+    TBool                       iNoteDisplayed;
+    CBTEngDevMan*               iDevMan;
+    CBTDeviceArray*             iResultArray;
+    TBTDeviceName               iRemoteDeviceName;
+    };
+
+#endif      // OPPCONTROLLER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/inc/prjconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_PRJCONFIG_H
+#define OBEXSM_PRJCONFIG_H
+
+/**
+ * Traces are enabled via RDebug::Print() in UDEB build, by default.
+ */
+#ifdef _DEBUG
+#define PRJ_ENABLE_TRACE
+#endif
+
+/**
+ * Traces will be written to file if this is defined.
+ */
+//#define PRJ_FILE_TRACE
+
+
+/**
+ * build the project for module test purpose if this is defined
+ */
+//#define PRJ_MODULETEST_BUILD
+
+/**
+ * build the project using stubs to replace the dependencies if this is defined
+ */
+//#define PRJ_USE_STUB
+
+#endif // OBEXSM_PRJCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/src/obexserviceopp.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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:  Export ECom interface implementations
+*
+*/
+
+
+#include <implementationproxy.h> //ECom header file
+#include "oppcontroller.h"
+
+// ---------------------------------------------------------------------------
+// An array of TImplementationProxy objects which onnect each 
+// implemeation with its instantiation function
+// ---------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] = 
+    {
+	IMPLEMENTATION_PROXY_ENTRY(0x101F8636 , COPPController::NewL )
+    };
+    
+// ---------------------------------------------------------------------------
+// Exported proxy function to resolve instantiation methods for an Ecom plug-in DLL
+// ---------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt & aTableCount)
+    {
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable; 
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/opp/src/oppcontroller.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,857 @@
+/*
+* Copyright (c) 2004 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:  Implementation of CBtListenActive
+*
+*/
+
+
+// INCLUDE FILES
+#include    <avkon.hrh>                    // AVKON components
+#include    "oppcontroller.h"
+#include    "btengdevman.h"
+#include    <obexutilsmessagehandler.h>
+#include    "debug.h"
+#include    <Obexutils.rsg>
+#include    <bautils.h>
+#include    <UiklafInternalCRKeys.h>
+#include    <obexutilsuilayer.h>
+#include    <btengdomaincrkeys.h>
+#include    <AiwServiceHandler.h> // The AIW service handler
+#include    <sysutil.h>
+#include    <btengdomaincrkeys.h> 
+#include    <msvids.h>
+#include    <driveinfo.h> 
+#include    <es_sock.h>
+#include    <bt_sock.h>
+
+// CONSTANTS
+
+const TInt    KBufferSize = 0x10000;  // 64 kB
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+COPPController* COPPController::NewL()
+    {
+    COPPController* self = new ( ELeave ) COPPController();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+    }
+    
+COPPController::COPPController()
+	{
+    TRACE_FUNC
+	}
+
+void COPPController::ConstructL()	
+	{
+    TRACE_FUNC
+    iObexTransferState = ETransferIdle;
+    iLowMemoryActiveCDrive = CObexUtilsPropertyNotifier::NewL(this, ECheckPhoneMemory);
+    iLowMemoryActiveMMC = CObexUtilsPropertyNotifier::NewL(this, ECheckMMCMemory);        
+    iDevMan=CBTEngDevMan::NewL(this);  
+    iResultArray = new (ELeave) CBTDeviceArray(1);
+    // Get default folder from CenRep 
+    TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine, 
+                                                       KLCReceiveFolder,
+                                                       iCenRepFolder);
+	} 
+
+COPPController::~COPPController()
+    {
+    TRACE_FUNC
+    delete iObexObject;
+    delete iBuf;
+    delete iLowMemoryActiveCDrive;
+    delete iLowMemoryActiveMMC;
+    delete iProgressDialog;
+    delete iWaitDialog;
+    delete iDevMan;
+    if (iResultArray)
+        {
+        iResultArray->ResetAndDestroy();
+        delete iResultArray;
+        }
+    iFs.Close();
+    }
+
+// ---------------------------------------------------------
+// ErrorIndication()
+// ---------------------------------------------------------
+//
+void COPPController::ErrorIndication( TInt TRACE_ONLY(aError) )
+    {
+    TRACE_FUNC
+    TRACE_ERROR((_L( "[oppreceiveservice] COPPController: ErrorIndication error:\t %d" ),aError));
+    HandleError(EFalse); // false because not explicit abort
+    }
+
+// ---------------------------------------------------------
+// AbortIndication() 
+// ---------------------------------------------------------
+//
+void COPPController::AbortIndication()
+	{
+	TRACE_FUNC
+	HandleError(ETrue); // true because explicit abort
+	}
+
+void COPPController::HandleError(TBool aAbort)
+    {
+    TRACE_ERROR((_L( "[oppreceiveservice] COPPController:HandleError" )));
+    if( iObexTransferState == ETransferPut || iObexTransferState == ETransferPutDiskError )
+        {        
+        if(iObexObject)
+            {
+            iObexObject->Reset();
+            }
+        CancelTransfer();
+        if(!aAbort)
+        	{
+			if(iMediaType == ESrcsMediaBT)
+				{
+				TRAP_IGNORE( TObexUtilsUiLayer::ShowGlobalConfirmationQueryL( R_BT_FAILED_TO_RECEIVE ) );
+				}
+			TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported)
+        	}
+        }
+    delete iBuf;
+    iBuf = NULL;
+    iObexTransferState = ETransferIdle;
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveInboxEntriesL(iObexObject, iMsvIdParent));
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL (iFullPathFilename));
+    }
+
+// ---------------------------------------------------------
+// TransportUpIndication()
+// ---------------------------------------------------------
+//
+void COPPController::TransportUpIndication()
+	{
+	TRACE_FUNC    
+    iObexTransferState = ETransferIdle;	
+ 
+	if ( !iFs.Handle() )
+	    {
+	    TRACE_INFO( (_L( "[oppreceiveservice] TransportUpIndication iFs.Connect()" )) ); 
+	    if ( iFs.Connect() )   // error value not preserved, iFs.Handle() checked one more time before first useage
+	        {
+	        TRACE_INFO( (_L( "[oppreceiveservice] TransportUpIndication iFs.Connect() failed" )) ); 
+	        }
+	    }
+
+    iFile = RFile();
+    iFullPathFilename.Zero();
+	}
+
+// ---------------------------------------------------------
+// ObexConnectIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::ObexConnectIndication( const TObexConnectInfo& /*aRemoteInfo*/,
+                                            const TDesC8& /*aInfo*/)
+    {
+    TRACE_FUNC  
+    if ( iMediaType == ESrcsMediaBT )
+        {
+        TRACE_INFO( _L( "[oppreceiveservice] ObexConnectIndication: BT media \t" ) );
+        
+        // Get remote device socket address and bluetooth name
+        // Remote bluetooth name will be displayed in the new message in inbox.
+        //
+        TSockAddr addr;
+        iObexServer->RemoteAddr(addr);
+        TBTDevAddr tBTDevAddr = static_cast<TBTSockAddr>(addr).BTAddr();
+        
+        TBTRegistrySearch nameSearch;
+        nameSearch.FindAddress(tBTDevAddr);
+        
+        iResultArray->Reset();
+        // ignore any errors here, if we don't get the name, we don't get the name
+        static_cast<void>(iDevMan->GetDevices(nameSearch, iResultArray));
+        }
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// ObexDisconnectIndication(
+// ---------------------------------------------------------
+//
+void COPPController::ObexDisconnectIndication(const TDesC8& /*aInfo*/)
+    {
+    TRACE_FUNC
+
+    }
+
+// ---------------------------------------------------------
+// TransportDownIndication()
+// ---------------------------------------------------------
+//
+void COPPController::TransportDownIndication()
+    {
+    TRACE_FUNC
+    // Remove receiving buffer and files used during file receiving.
+    //
+    delete iObexObject;
+    iObexObject = NULL;
+    TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL (iFullPathFilename)); 
+    iFs.Close();
+    }
+
+// ---------------------------------------------------------
+// PutRequestIndication()
+// ---------------------------------------------------------
+//
+CObexBufObject* COPPController::PutRequestIndication()
+    {
+    TRACE_FUNC
+    iLengthHeaderReceived = EFalse; // New put request so clear header based state
+    iObexTransferState = ETransferPut;
+    
+    // Checking if backup is running now - if backup process is active, then we
+    // need to cancel transfer - otherwise phone will freeze during receiving
+    // data
+    if ( TObexUtilsUiLayer::IsBackupRunning() )
+        {
+        TRACE_INFO ( _L ("Backup in progress! Canceling incoming transfer."));
+        iObexTransferState = ETransferPutInitError;
+        return NULL;
+        }
+    
+    TRAPD(err, HandlePutRequestL());
+    if(err == KErrNone)
+        {
+        return iObexObject;
+        }
+    TRACE_INFO( _L( "[oppreceiveservice] COPPController: PutRequestIndication end\t" ) );
+    if (iObexTransferState != ETransferPutInitError)
+        {
+        iObexTransferState = ETransferPutDiskError;
+        }
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// PutPacketIndication()    
+// ---------------------------------------------------------
+//
+TInt COPPController::PutPacketIndication()
+    {
+    TRACE_FUNC
+    if(iObexTransferState == ETransferPutCancel)
+        {
+        // User cancelled the put request, so error the next packet to terminate the put request.
+        // BIP considers the Unauthorized error response suitable for this...
+        HandleError(ETrue); // reset state and clear up
+        return KErrIrObexRespUnauthorized;
+        }
+    
+    iTotalSizeByte = iObexObject->Length();     // get size of receiving file
+    iReceivingFileName = iObexObject->Name();   // get name of receiving file
+    
+    // Check that capacity is suitable as soon as possible
+    if(!iLengthHeaderReceived && iTotalSizeByte > 0)
+        {
+        iLengthHeaderReceived = ETrue; // total size value is from length header
+        TBool capacity = ETrue;
+        TRAPD(retTrap, capacity = CheckCapacityL());
+        if(retTrap != KErrNone)
+            {
+            return KErrGeneral;
+            }
+        if(!capacity)
+            {
+            TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY));
+            return KErrDiskFull;
+            }
+        }
+    if(iObexObject->Name().Length() > KMaxFileName)
+        {
+        return KErrAccessDenied;
+        }
+    if(iObexTransferState == ETransferPutDiskError)
+        {
+        return KErrDiskFull;
+        }
+    // successfully received put packet if we reached here
+    iObexTransferState = ETransferPut;
+    
+    // Now we need to either create (in the first instance) or update the dialog on the UI.
+    if(ReceivingIndicatorActive())
+        {
+        UpdateReceivingIndicator();
+        }
+    else if(!iNoteDisplayed)
+        {
+        // No note launched yet, so try to launch
+        TRAPD(err, LaunchReceivingIndicatorL());
+        iNoteDisplayed = (err == KErrNone);
+        }
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// PutCompleteIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::PutCompleteIndication()
+    {
+    TRACE_FUNC
+    TInt retVal = KErrNone;
+    if(iObexTransferState == ETransferPutCancel)
+        {
+        retVal = KErrIrObexRespUnauthorized;
+        HandleError(ETrue);
+        }
+    else
+        {
+        retVal = HandlePutCompleteIndication();
+        iObexTransferState = ETransferIdle;
+        CloseReceivingIndicator();
+        }
+    TRACE_FUNC_EXIT
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// GetRequestIndication()
+// ---------------------------------------------------------
+//
+CObexBufObject* COPPController::GetRequestIndication( CObexBaseObject* /*aRequiredObject*/)
+    {
+    TRACE_FUNC
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// GetPacketIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::GetPacketIndication()
+    {
+    TRACE_FUNC
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// GetCompleteIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::GetCompleteIndication()
+    {
+    TRACE_FUNC
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// SetPathIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::SetPathIndication( const CObex::TSetPathInfo& /*aPathInfo*/, 
+                                        const TDesC8& /*aInfo*/)
+    {
+    TRACE_FUNC
+    // SetPath is not implemented in OPP - so following IrOBEX guidance, return
+    // the Forbidden response code.
+    return KErrIrObexRespForbidden;
+    }
+
+
+
+// ---------------------------------------------------------
+// HandleNotifyL()
+// ---------------------------------------------------------
+//
+void COPPController::HandleNotifyL( TMemoryPropertyCheckType aCheckType )
+    {    
+    TRACE_FUNC        
+    
+    // Only interested on this notification if we are receiving something
+    if ( iObexTransferState == ETransferPut )
+        {
+        // Check the keys, what has been changed.
+        TRACE_INFO( _L( "[oppreceiveservice] COPPController::HandleNotifyL\t" ) );
+        if ( aCheckType == ECheckPhoneMemory )
+            {            
+            if ( SysUtil::FFSSpaceBelowCriticalLevelL( NULL, 0 ) )
+                {
+                TRACE_INFO( _L( "[oppreceiveservice] COPPController: Obex Server error diskfull\t" ) );
+                iObexTransferState = ETransferPutDiskError;                    
+                }
+            }
+        else if ( aCheckType == ECheckMMCMemory )
+            {                                
+            if ( SysUtil::MMCSpaceBelowCriticalLevelL( NULL, 0 ) )
+                {                        
+                TRACE_INFO( _L( "[oppreceiveservice] COPPController: Obex Server error diskfull\t" ) );
+                iObexTransferState = ETransferPutDiskError;
+                }
+            }            
+        }        
+    }
+// ---------------------------------------------------------
+// HandlePutRequestL()
+// ---------------------------------------------------------
+//
+void COPPController::HandlePutRequestL()
+    {
+    TRACE_FUNC
+    
+    delete iObexObject;
+    iObexObject = NULL;
+    
+    iFile = RFile();
+    
+    if ( !iFs.Handle() )
+        {
+        User::Leave(KErrGeneral);
+        }
+
+    // Assign an initial value to iDrive
+    iDrive = GetDriveWithMaximumFreeSpaceL();    
+     
+    // If iDrive is at critical space level, we immediately show out_of_memory.
+    //
+    if (SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, 0, iDrive ))
+        {
+        TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY));
+        User::Leave(KErrGeneral);
+        }
+        
+    TRACE_INFO( (_L( "[oppreceiveservice] HandlePutRequestL %d\t" ),iDrive ) ); 
+    
+    iObexObject = CObexBufObject::NewL( NULL );    
+    
+    delete iBuf;
+    iBuf = NULL;
+    
+    TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported);
+    if ( iMediaType == ESrcsMediaBT )
+        {
+        TChar driveLetter;
+        iDefaultFolder.Zero();
+        iFs.DriveToChar(iDrive, driveLetter);
+        iDefaultFolder.Append(driveLetter);
+        if ( iDrive == EDriveC )
+            {
+            iDefaultFolder.Append(_L(":\\data\\"));
+            }
+        else
+            {
+            iDefaultFolder.Append(_L(":\\"));
+            }
+        iDefaultFolder.Append(iCenRepFolder);
+        
+        iFile = RFile();
+        iFullPathFilename.Zero();
+        TRAPD(err, TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL(iFile,
+                                                                              iDefaultFolder,
+                                                                              iFullPathFilename,
+                                                                              iBuf,
+                                                                              KBufferSize));
+        if(err != KErrNone)
+            {
+            iObexTransferState = ETransferPutInitError;
+            User::Leave(KErrGeneral);
+            }
+        }
+    else
+        {
+        iObexTransferState = ETransferPutInitError;
+        User::Leave(KErrGeneral);
+        }
+    
+    User::LeaveIfError(iFile.Open(iFs,iFullPathFilename,EFileWrite));   
+    TObexRFileBackedBuffer bufferdetails(*iBuf,iFile,CObexBufObject::EDoubleBuffering);    
+    
+    TRAPD(err, iObexObject->SetDataBufL( bufferdetails) );
+    if (err != KErrNone)
+        {
+        iObexTransferState = ETransferPutInitError;
+        User::Leave(KErrGeneral);  // set to != KErrNone
+        }
+    
+    TRACE_INFO( _L( "[oppreceiveservice] COPPController: HandlePutRequestL completed\t" ) );
+    }
+
+
+// ---------------------------------------------------------
+// HandlePutCompleteIndication()
+// ---------------------------------------------------------
+//
+TInt COPPController::HandlePutCompleteIndication()
+	{
+	TRACE_FUNC        
+    TInt retVal = KErrNone;
+
+	TChar driveLetter;
+	iDefaultFolder.Zero();
+	iFs.DriveToChar(iDrive, driveLetter);
+	iDefaultFolder.Append(driveLetter);
+	if ( iDrive == EDriveC )
+	    {
+	    iDefaultFolder.Append(_L(":\\data\\"));
+	    }
+	else
+	    {
+	    iDefaultFolder.Append(_L(":\\"));
+	    }
+	iDefaultFolder.Append(iCenRepFolder);
+	iFullPathFilename.Zero();
+	iFullPathFilename.Append(iDefaultFolder);
+       
+        
+	TRACE_INFO( (_L( "[oppreceiveservice] HandlePutCompleteIndication %d\t" ),iDrive ) ); 
+	
+	if (iMediaType==ESrcsMediaBT)
+	    {
+	    TRAP ( retVal, TObexUtilsMessageHandler::SaveFileToFileSystemL(iObexObject,
+	                                                                   KUidMsgTypeBt,
+	                                                                   iMsvIdParent,
+	                                                                   iFullPathFilename,
+	                                                                   iFile,
+	                                                                   iRemoteDeviceName));
+	    }
+	TRACE_ASSERT( iMediaType!=ESrcsMediaIrDA, KErrNotSupported);
+	if ( retVal == KErrNone)
+	    {
+	    TRAP (retVal, TObexUtilsMessageHandler::AddEntryToInboxL(iMsvIdParent, iFullPathFilename));		    
+                
+    if( retVal != KErrNone )
+        {
+        TRACE_INFO( (_L( "[oppreceiveservice] HandlePutCompleteIndication AddEntryToInboxL() failed  %d \t" ),retVal ) );                 	
+        TRAP_IGNORE(TObexUtilsMessageHandler::RemoveInboxEntriesL(iObexObject, iMsvIdParent));        
+        }
+        }
+	else
+	    {
+	    TRACE_INFO( (_L( "[oppreceiveservice] HandlePutCompleteIndication failed  %d \t" ),retVal ) ); 
+	    }
+	
+
+    delete iObexObject;
+    iObexObject = NULL;
+
+    delete iBuf;
+    iBuf = NULL;
+    
+    iPreviousDefaultFolder = iDefaultFolder;  // save the last file path where file is successfully saved to file system.
+    iMsvIdParent = KMsvNullIndexEntryId; 
+    TRACE_INFO( _L( "[oppreceiveservice] HandlePutCompleteIndication Done\t" ) );    
+    return retVal;
+	}
+
+  
+// ---------------------------------------------------------
+// CheckCapacity()
+// ---------------------------------------------------------
+//	    
+TBool COPPController::CheckCapacityL()
+    {
+    TRACE_FUNC_ENTRY   
+    
+    iDrive = EDriveZ; // Intialize iDrive to Z
+    TInt filesize = iObexObject->Length();
+    
+    RFs rfs ;
+    User::LeaveIfError(rfs.Connect());
+         
+    TInt mmcDrive = KDefaultDrive;   // External memroy card  
+    TInt imsDrive = KDefaultDrive;   // Internal mass storage   
+
+    User::LeaveIfError(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, imsDrive));
+    User::LeaveIfError(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, mmcDrive));      
+    
+    TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL imsDrive=%d; mmcDrive=%d\t" ),imsDrive, mmcDrive ) );
+    
+    TVolumeInfo volumeInfo;
+    TInt err = rfs.Volume(volumeInfo, imsDrive);
+    
+    // If err != KErrNone, Drive is not available.
+    //
+    if ( !err )
+        {
+        // Check capacity on Internal mass storage            
+        TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL Internal mass storage\t" )) );
+        if ( !SysUtil::DiskSpaceBelowCriticalLevelL( &rfs, filesize, imsDrive ) )
+            {
+            iDrive = imsDrive;            
+            }
+        }
+    
+    if ( iDrive == EDriveZ)
+        {
+        err = rfs.Volume(volumeInfo, mmcDrive);
+        if ( !err )
+            {
+            // Check capacity on Internal mass storage    
+            TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL Checking memory card\t" )) );
+            if ( !SysUtil::DiskSpaceBelowCriticalLevelL( &rfs, filesize, mmcDrive ) )
+                {                    
+                iDrive = mmcDrive;
+                }   
+            }
+        }           
+    if ( iDrive == EDriveZ )
+        {
+        TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL Checking phone memory\t" )) );
+        // Phone memory
+        if( !SysUtil::DiskSpaceBelowCriticalLevelL( &rfs, filesize, EDriveC ))
+            {
+            iDrive = EDriveC;
+            }
+        }
+    rfs.Close();
+    TRACE_INFO( (_L( "[oppreceiveservice] CheckCapacityL iDrive = %d\t" ),iDrive ) );
+    TRACE_FUNC_EXIT
+    if (iDrive == EDriveZ)
+        {
+        // If there is no free space for receiving file, we need to set iPreviousDefaultFolder back to iDefaultFolder.
+        // In order to show the file receveing dialog correctly.
+        iDefaultFolder = iPreviousDefaultFolder;
+        return EFalse;
+        }
+    return ETrue;
+    }    
+
+// ---------------------------------------------------------
+// IsOBEXActive()
+// ---------------------------------------------------------
+//	    
+TBool COPPController::IsOBEXActive()
+    {
+    TRACE_FUNC
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// SetMediaType()
+// ---------------------------------------------------------
+//
+void COPPController::SetMediaType( TSrcsMediaType aMediaType ) 
+    {
+    TRACE_FUNC    
+    iMediaType=aMediaType;    
+    }
+    
+// ---------------------------------------------------------
+// SetObexServer()
+// ---------------------------------------------------------
+//
+TInt COPPController::SetObexServer( CObexServer* aServer)
+	{	
+	TInt retVal=KErrNone;    
+	
+	if (aServer)
+	    {  
+	    iObexServer = aServer;
+	    retVal=aServer->Start(this);    
+	    }
+	return retVal;
+	}
+   
+// ---------------------------------------------------------
+// CancelTransfer()
+// ---------------------------------------------------------
+//
+void COPPController::CancelTransfer()
+    {
+    TRACE_FUNC
+    CloseReceivingIndicator();
+    if(iObexTransferState == ETransferPut)
+        {
+        iObexTransferState = ETransferPutCancel;
+        }
+    else // go to idle for all other states
+        {
+        iObexTransferState = ETransferIdle;
+        }
+    }
+
+void COPPController::LaunchReceivingIndicatorL()
+    {
+    if(ReceivingIndicatorActive())
+        {
+        return;
+        }
+    
+    if(iTotalSizeByte > 0)
+        {
+        iProgressDialog = CGlobalProgressDialog::NewL(this);  
+        if(iReceivingFileName.Length() > 0)
+            {
+            iProgressDialog->ShowProgressDialogNameSizeL(iReceivingFileName, iTotalSizeByte);
+            }
+        else
+            {
+            if(iMediaType == ESrcsMediaBT)
+                {
+                iProgressDialog->ShowProgressDialogL(R_BT_RECEIVING_DATA);
+                }
+            TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported);
+            }
+        }
+    else
+        {
+        iWaitDialog = CGlobalDialog::NewL(this);
+        if(iMediaType == ESrcsMediaBT)
+            {
+            iWaitDialog->ShowNoteDialogL(R_BT_RECEIVING_DATA, ETrue);
+            }
+        TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported);
+        }
+    }
+
+void COPPController::UpdateReceivingIndicator()
+    {
+    if(iProgressDialog)
+        {
+        iProgressDialog->UpdateProgressDialog(iObexObject->BytesReceived(), iTotalSizeByte);
+        }
+    // else we are using a wait note, so no "need" to update
+    }
+
+void COPPController::HandleGlobalProgressDialogL( TInt aSoftkey )
+    {
+    TRACE_FUNC
+    
+    if(aSoftkey == EAknSoftkeyCancel)
+        {
+        CancelTransfer();
+        }
+    else if(aSoftkey == EAknSoftkeyHide)
+        {
+        CloseReceivingIndicator(EFalse); // Don't reset state as only hiding
+        }
+    }
+
+void COPPController::HandleGlobalNoteDialogL( TInt aSoftkey )
+    {
+    TRACE_FUNC
+    
+    if(aSoftkey == EAknSoftkeyCancel)
+        {
+        CancelTransfer();
+        }
+    else if(aSoftkey == EAknSoftkeyHide)
+        {
+        CloseReceivingIndicator(EFalse); // Don't reset state as only hiding
+        }
+    }
+
+void COPPController::CloseReceivingIndicator(TBool aResetDisplayedState)
+    {
+    TRACE_FUNC
+    if(aResetDisplayedState)
+        {
+        iNoteDisplayed = EFalse;
+        }
+    if(iProgressDialog)
+        {
+        iProgressDialog->ProcessFinished();
+        delete iProgressDialog;
+        iProgressDialog = NULL;
+        }
+    if(iWaitDialog)
+        {
+        iWaitDialog->ProcessFinished();
+        delete iWaitDialog;
+        iWaitDialog = NULL;
+        }
+    }
+
+ // ---------------------------------------------------------
+  // GetDriveWithMaximumFreeSpace()
+  // ---------------------------------------------------------
+  // 
+  TInt COPPController::GetDriveWithMaximumFreeSpaceL()
+      {
+      // Get drive with maximum freespace among phone memory, MMC, internal mass storage.
+      //
+      TRACE_FUNC   
+      TVolumeInfo volumeInfoC;
+      TVolumeInfo volumeInfoE;
+      TVolumeInfo volumeInfoF;
+      TInt64 max = 0;
+      TInt drive = 0;
+      
+      TInt err = iFs.Volume(volumeInfoC, EDriveC);
+     
+      if ( !err )
+          {
+          // set initial values to max and drive.
+          max = volumeInfoC.iFree;
+          drive = EDriveC;
+          }
+           
+      err = iFs.Volume(volumeInfoE, EDriveE);     
+      if ( !err )
+          {
+          if (volumeInfoE.iFree >= max)
+              {
+              max = volumeInfoE.iFree;
+              drive = EDriveE;             
+              }
+          
+          }
+           
+      err = iFs.Volume(volumeInfoF, EDriveF);
+      if ( !err )
+          {
+          if (volumeInfoF.iFree >= max)
+              {
+              max = volumeInfoF.iFree;
+              drive = EDriveF;             
+              }
+          }
+      
+      max = 0;
+      return drive;
+      }
+ 
+ 
+ // ----------------------------------------------------------
+ // COPPController::HandleGetDevicesComplete
+ // Callback from devman
+ // ----------------------------------------------------------
+ //
+ void COPPController::HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* /*aDeviceArray*/)
+    {
+    TRACE_INFO( _L( "[oppreceiveservice] HandleGetDevicesComplete: enter \t" ) );
+    if ( aErr == KErrNone )
+        {
+        if ( iResultArray->Count())
+            {             
+            iRemoteDeviceName.Zero();
+            if ( iResultArray->At(0)->FriendlyName().Length() > 0 )
+                {
+                TRACE_INFO( _L( "[oppreceiveservice] HandleGetDevicesComplete: got friendly name \t" ) );
+                iRemoteDeviceName.Copy(iResultArray->At(0)->FriendlyName());
+                }
+            else
+                {
+                TRACE_INFO( _L( "[oppreceiveservice] HandleGetDevicesComplete: got devciename name \t" ));
+                TRAP_IGNORE(iRemoteDeviceName.Copy( BTDeviceNameConverter::ToUnicodeL(iResultArray->At(0)->DeviceName())));
+                }
+            }
+        }
+    }
+ 
+//////////////////////////// Global part ////////////////////////////
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/mtmuibluetooth.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __MTMUIBLUETOOTH_IBY__
+#define __MTMUIBLUETOOTH_IBY__
+
+#ifdef __BT
+file=ABI_DIR\BUILD_DIR\btmtmui.dll			SHARED_LIB_DIR\btmtmui.dll
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/mtmuibluetoothresources.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __MTMUIBLUETOOTHRESOURCES_IBY__
+#define __MTMUIBLUETOOTHRESOURCES_IBY__
+
+#ifdef __BT
+data=DATAZ_\resource\messaging\mtm\btmtmui.rsc             resource\messaging\mtm\btmtmui.rsc
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/mtmuiinfrared.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __MTMUIINFRARED_IBY__
+#define __MTMUIINFRARED_IBY__
+
+file=ABI_DIR\BUILD_DIR\irmtmui.dll                          SHARED_LIB_DIR\irmtmui.dll
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/mtmuiinfraredResources.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __MTMUIINFRAREDRESOURCES_IBY__
+#define __MTMUIINFRAREDRESOURCES_IBY__
+
+data=DATAZ_\resource\messaging\mtm\irmtmui.rsc             resource\messaging\mtm\irmtmui.rsc
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/obexservicebip.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __OBEXSERVICEBIP_IBY__
+#define __OBEXSERVICEBIP_IBY__
+
+#ifdef __BT
+#ifdef __BT_IMAGING_PROFILE
+ECOM_PLUGIN(obexservicebip.dll,101F8671.rsc)
+#endif			       		
+#endif
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexreceiveservices/rom/obexserviceopp.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __OBEXSERVICEOPP_IBY__
+#define __OBEXSERVICEOPP_IBY__
+
+#ifdef __BT
+ECOM_PLUGIN(obexserviceopp.dll,101F8636.rsc)
+#endif
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/BWINS/obexservicesendutilsU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+	?AddImageL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 1 NONAME ; void CBTServiceParameterList::AddImageL(class TDesC16 const &)
+	?AddImageL@CBTServiceParameterList@@QAEXVRFile@@@Z @ 2 NONAME ; void CBTServiceParameterList::AddImageL(class RFile)
+	?AddObjectL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 3 NONAME ; void CBTServiceParameterList::AddObjectL(class TDesC16 const &)
+	?AddObjectL@CBTServiceParameterList@@QAEXVRFile@@@Z @ 4 NONAME ; void CBTServiceParameterList::AddObjectL(class RFile)
+	?AddXhtmlL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 5 NONAME ; void CBTServiceParameterList::AddXhtmlL(class TDesC16 const &)
+	?NewL@CBTServiceAPI@@SAPAV1@XZ @ 6 NONAME ; class CBTServiceAPI * CBTServiceAPI::NewL(void)
+	?NewL@CBTServiceParameterList@@SAPAV1@XZ @ 7 NONAME ; class CBTServiceParameterList * CBTServiceParameterList::NewL(void)
+	?NewLC@CBTServiceParameterList@@SAPAV1@XZ @ 8 NONAME ; class CBTServiceParameterList * CBTServiceParameterList::NewLC(void)
+	?StartServiceL@CBTServiceAPI@@QAEXW4TBTServiceType@@PAVCBTServiceParameterList@@@Z @ 9 NONAME ; void CBTServiceAPI::StartServiceL(enum TBTServiceType, class CBTServiceParameterList *)
+	?StartSynchronousServiceL@CBTServiceAPI@@QAEXW4TBTServiceType@@PAVCBTServiceParameterList@@@Z @ 10 NONAME ; void CBTServiceAPI::StartSynchronousServiceL(enum TBTServiceType, class CBTServiceParameterList *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/eabi/obexservicesendutilsu.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,16 @@
+EXPORTS
+	_ZN13CBTServiceAPI13StartServiceLE14TBTServiceTypeP23CBTServiceParameterList @ 1 NONAME
+	_ZN13CBTServiceAPI24StartSynchronousServiceLE14TBTServiceTypeP23CBTServiceParameterList @ 2 NONAME
+	_ZN13CBTServiceAPI4NewLEv @ 3 NONAME
+	_ZN23CBTServiceParameterList10AddObjectLE5RFile @ 4 NONAME
+	_ZN23CBTServiceParameterList10AddObjectLERK7TDesC16 @ 5 NONAME
+	_ZN23CBTServiceParameterList4NewLEv @ 6 NONAME
+	_ZN23CBTServiceParameterList5NewLCEv @ 7 NONAME
+	_ZN23CBTServiceParameterList9AddImageLE5RFile @ 8 NONAME
+	_ZN23CBTServiceParameterList9AddImageLERK7TDesC16 @ 9 NONAME
+	_ZN23CBTServiceParameterList9AddXhtmlLERK7TDesC16 @ 10 NONAME
+	_ZTI13CBTServiceAPI @ 11 NONAME ; #<TI>#
+	_ZTI23CBTServiceParameterList @ 12 NONAME ; #<TI>#
+	_ZTV13CBTServiceAPI @ 13 NONAME ; #<VT>#
+	_ZTV23CBTServiceParameterList @ 14 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 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:  This file provides the information required for building the
+*                whole of ObexSendService
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+../obexservicesendutils/inc/BTServiceAPI.h           |../../inc/btserviceapi.h
+../obexservicesendutils/inc/BTServiceParameterList.h |../../inc/BTServiceParameterList.h
+../rom/obexservicesendutils.iby                      CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicesendutils.iby)
+
+PRJ_MMPFILES
+../group/sendutils.mmp
+
+PRJ_TESTMMPFILES
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/group/sendutils.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002 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:  This is project specification file for the BtServiceUtils
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+TARGET          obexservicesendutils.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101F86B6
+CAPABILITY	CAP_GENERAL_DLL
+VENDORID 	VID_DEFAULT
+
+SOURCEPATH      ../obexservicesendutils/src
+SOURCE          BTServiceAPI.cpp
+SOURCE          BTServiceClient.cpp
+SOURCE          BTServiceUtils.cpp
+SOURCE          BTServiceStarter.cpp
+SOURCE          BTServiceParameterList.cpp
+
+SOURCE          BTSOPPController.cpp
+SOURCE          BTSBIPController.cpp
+SOURCE          BTSBPPController.cpp
+SOURCE          BTSBPPObjectRequest.cpp
+SOURCE          BTSBPPObjectServer.cpp
+SOURCE          BTSBPPServerWait.cpp
+
+SOURCE          BTSUCapabilityResolver.cpp
+SOURCE          BTSUDataConverter.cpp
+SOURCE          BTSUImageConverter.cpp
+SOURCE          BTSUPassKeyRequest.cpp
+SOURCE          BTSURefObjectResolver.cpp
+SOURCE          BTSUXmlParser.cpp
+SOURCE          BTConnectionTimer.cpp
+SOURCE          BTSController.cpp
+SOURCE          BTSProgresstimer.cpp
+
+USERINCLUDE     ../obexservicesendutils/inc
+SYSTEMINCLUDE  ../../inc ../../../inc /epoc32/include/libc
+SYSTEMINCLUDE  /epoc32/include/mw/hb/hbcore
+SYSTEMINCLUDE  /epoc32/include/mw/hb/hbwidgets
+MW_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY         apgrfx.lib              // App Arch Session
+LIBRARY         apmime.lib              // App Arch Mime Recognizers
+LIBRARY         bafl.lib                // Basic Application Framework Library
+LIBRARY         bitmaptransforms.lib    // Bitmap transfomration library
+LIBRARY         bluetooth.lib           // Bluetooth Sockets
+LIBRARY         btdevice.lib            // Bluetooth Device
+LIBRARY         btengdiscovery.lib      // Bluetooth Discovery
+LIBRARY         btengsettings.lib       // Bluetooth Settings
+LIBRARY         charconv.lib            // Character conversion
+LIBRARY         efsrv.lib               // File Server
+LIBRARY         esock.lib               // Socket Connections
+LIBRARY         estor.lib               // Write and Read streams
+LIBRARY         euser.lib               // Base library
+LIBRARY         fbscli.lib              // Bitmap utils
+LIBRARY         imageconversion.lib     // Image conversion library
+LIBRARY         irobex.lib              // Object Exchange
+LIBRARY         obexutils.lib           // Object Exchange UI services
+//LIBRARY         xmlinterface.lib      // XML parser interface
+LIBRARY         caf.lib   				// DRM common
+LIBRARY         xmlframework.lib        // XML Framework
+LIBRARY			featmgr.lib				// Inquire supported static feature
+LIBRARY			HbCore.lib
+LIBRARY			HbWidgets.lib
+DEBUGLIBRARY    flogger.lib             // File logging services
+
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/inc/btsendingservicedebug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 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:  This file defines logging macros for BTSS.
+*
+*/
+
+
+#ifndef BTSENDINGSERVICEDEBUG_H
+#define BTSENDINGSERVICEDEBUG_H
+
+
+#ifdef _DEBUG
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"btss.log");
+_LIT(KLogDirFullName,"c:\\logs\\");
+_LIT(KLogDir,"btss");
+
+#define FLOG(a)   { FPrint(a); }
+#define FTRACE(a) { a; }
+
+// Declare the FPrint function
+//
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+#include <e32svr.h>
+
+#define FLOG(a)   { RDebug::Print(a); }
+#define FTRACE(a) { a; }
+
+// Declare the FPrint function
+//
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+    }
+
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(a)
+#define FTRACE(a)
+
+#endif // _DEBUG
+
+
+#endif // BTSENDINGSERVICEDEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/inc/btsendserviceinterface.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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:  ?Description
+*
+*/
+
+ 
+#ifndef BTSENDSERVICEINTERFACE_H
+#define BTSENDSERVICEINTERFACE_H
+
+#include <xqserviceprovider.h>
+
+class BtSendManager;
+
+class BTSendServiceInterface : public XQServiceProvider
+{
+    Q_OBJECT
+    
+public:
+    BTSendServiceInterface( QObject *parent = 0);
+    inline ~BTSendServiceInterface();
+
+public slots:
+    void send(QVariant data);
+    
+    
+};
+
+inline BTSendServiceInterface::~BTSendServiceInterface()
+    {
+    }
+
+#endif // BTSENDSERVICEINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/inc/btsendserviceprovider.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * 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:
+ * class to manage differnt messaging views.
+ *
+ */
+
+#ifndef BTSENDSERVICEPROVIDER_H
+#define BTSENDSERVICEPROVIDER_H
+
+#include <e32base.h>
+#include <qlist.h>
+#include <qvariant.h>
+
+class CBTServiceAPI;
+class CBTSSSendListHandler;
+
+
+class CBtSendServiceProvider: public CBase
+    {
+public:
+    /**
+     * constructor
+     */
+    static CBtSendServiceProvider* NewL();
+    
+    /**
+     * Destructor.
+     */
+    ~CBtSendServiceProvider();
+    
+    
+    int send(const QList<QVariant> &arguments);
+private:
+    CBtSendServiceProvider();    
+    void ConstructL();
+    
+public:
+    CBTSSSendListHandler*    iConverter;
+    CBTServiceAPI*  iBTSendingService;
+     };
+
+#endif /* BTSENDSERVICEPROVIDER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/inc/btsssendlisthandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,142 @@
+/*
+* 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:  Converter class for converting AIW paramerer list to 
+*                bt send parameter list
+*
+*/
+
+
+#ifndef BTSSSENDLISTHANDLER_H
+#define BTSSSENDLISTHANDLER_H
+
+#include <e32base.h>
+#include <qvariant.h>
+#include <qlist.h>
+#include "btsendingservicedebug.h"
+
+class CBTServiceParameterList;
+
+/**
+ *  BTSSend list handler
+ *  Converts AIW list to bt sending object list 
+ * 
+ *  @since S60 v3.2
+ */
+class CBTSSSendListHandler : public CActive
+    {
+        
+public:
+
+    static CBTSSSendListHandler* NewL();
+    static CBTSSSendListHandler* NewLC();    
+
+    /**
+    * Destructor.
+    */
+    virtual ~CBTSSSendListHandler();
+
+    /**
+     * ConvertList
+     *
+     * @since S60 v3.2
+     * @param aOutParamList AIW parameter list
+     * @param aList bt sending parameter list
+     * @return error code
+     */
+     TInt ConvertList(const QList<QVariant> *arguments,CBTServiceParameterList* aList   );
+
+     
+     
+// from base class CActive
+     
+   /**
+    * From CActive.
+    * RunL
+    *
+    * @since S60 v3.2
+    */
+    void RunL();
+     
+    /**
+     * From CActive.
+     * DoCancel
+     *
+     * @since S60 v3.2
+     */
+    inline void DoCancel();
+
+
+private:
+    CBTSSSendListHandler();
+
+    void ConstructL();
+
+    /**
+     * Add object 
+     * 
+     * @since S60 v3.2
+     */
+    void AddObject();
+    
+    /**
+     * Add object 
+     * 
+     * @since S60 v3.2
+     */
+    void DoAddObjectL();
+    
+private: // data
+
+    /**
+     * BT sending parameter list
+     * Not own.
+     */
+    CBTServiceParameterList* iList;
+
+    /**
+     * AIW parameter list
+     * Not own.
+     */
+//    const CAiwGenericParamList* iOutParamList; 
+    
+    const QList<QVariant> *mArguments;
+    
+    /**
+     * List index 
+     */
+    TInt iListIndex;
+    
+    /**
+     * Sync waiter object 
+     */
+    CActiveSchedulerWait    iSyncWaiter;
+    };
+
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// DoCancel()
+// ---------------------------------------------------------------------------
+//
+inline void CBTSSSendListHandler::DoCancel()
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoCancel()"));           
+    if ( iSyncWaiter.IsStarted() )
+        {
+        iSyncWaiter.AsyncStop();
+        }
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoCancel() done"));               
+    }
+
+#endif // BTSSSENDLISTHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/obexhighway.pro	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,55 @@
+#
+# 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 = app
+TARGET = obexhighway
+CONFIG += hb  \
+    service
+
+MOC_DIR = moc
+OBJECTS_DIR = obj
+
+HEADERS += inc/btsendserviceinterface.h \
+    inc/btsssendlisthandler.h \
+    inc/btsendingservicedebug.h \
+    inc/btsendserviceprovider.h 
+
+SOURCES += src/main.cpp \
+	src/btsendserviceinterface.cpp \
+    src/btsssendlisthandler.cpp \
+    src/btsendserviceprovider.cpp
+
+    
+INCLUDEPATH += . ../../inc
+
+SERVICE.FILE = xml/obexhighway_conf.xml
+SERVICE.OPTIONS = embeddable \
+    hidden
+
+LIBS += -lhbcore \
+    -lxqservice \
+    -lxqserviceutil \
+	-lobexservicesendutils \
+	-lbtfeatures \
+	-lflogger \
+	-lxqutils
+    
+symbian {
+	TARGET.UID3 = 0x2002EA5A
+	TARGET.CAPABILITY = All -TCB
+	}
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "./rom/obexhighway.iby CORE_MW_LAYER_IBY_EXPORT_PATH(obexhighway.iby)"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/rom/obexhighway.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __OBEXHIGHWAY_IBY__
+#define __OBEXHIGHWAY_IBY__
+
+file=ABI_DIR\UREL\obexhighway.exe               SHARED_LIB_DIR\obexhighway.exe
+data=DATAZ_\resource\apps\obexhighway.rsc                      resource\apps\obexhighway.rsc
+data=DATAZ_\private\10003a3f\import\apps\obexhighway_reg.rsc   private\10003a3f\import\apps\obexhighway_reg.rsc
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/src/btsendserviceinterface.cpp	Fri May 28 17:03:06 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:  ?Description
+*
+*/
+
+ 
+#include "btsendserviceinterface.h"
+#include "btsendserviceprovider.h"
+
+BTSendServiceInterface::BTSendServiceInterface(QObject* parent)
+: XQServiceProvider("obexhighway.com.nokia.symbian.IFileShare",parent)
+    {
+    publishAll();
+    }
+
+  
+void BTSendServiceInterface::send(QVariant data)
+    {
+    QList<QVariant> arguments;
+    
+    if(data.type()==QVariant::String)
+        {
+        arguments.append(data);
+        }
+    else
+        {
+        arguments.append(data.toList());
+        }
+    CBtSendServiceProvider *btSendServiceProvider = NULL;
+    TRAPD(err,btSendServiceProvider = CBtSendServiceProvider::NewL());
+    //todo need to decide what needs to be return to the service client if error occurs also how to do it
+    if(err)
+        return;
+    btSendServiceProvider->send(arguments);
+    delete btSendServiceProvider;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/src/btsendserviceprovider.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ * 
+ * Description: 
+ *
+ */
+
+
+#include "btsendserviceprovider.h"
+#include <btserviceapi.h>
+#include "btsssendlisthandler.h"
+#include <btfeaturescfg.h>  // For Enterprise security settings
+#include <btnotif.h>    // For Enterprise security notifier
+
+
+
+
+CBtSendServiceProvider* CBtSendServiceProvider::NewL()
+    {
+    CBtSendServiceProvider* self = new( ELeave ) CBtSendServiceProvider();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+    
+void CBtSendServiceProvider::ConstructL()
+    {
+    // Check features setting - if not completely enabled with enterprise settings then we are not allowed to send anything.
+    // Fail here at the first fence, otherwise there are a number of other areas that need to be considered.
+    if(BluetoothFeatures::EnterpriseEnablementL() != BluetoothFeatures::EEnabled)
+        {
+        RNotifier notifier;
+        User::LeaveIfError(notifier.Connect());
+        CleanupClosePushL(notifier);
+        User::LeaveIfError(notifier.StartNotifier(KBTEnterpriseItSecurityInfoNotifierUid, KNullDesC8));
+        CleanupStack::PopAndDestroy(&notifier);
+        
+        //@TODO in old code we don't continue further what needs to be done here
+        }
+    iBTSendingService = CBTServiceAPI::NewL();
+    iConverter = CBTSSSendListHandler::NewL();
+    }
+
+CBtSendServiceProvider::CBtSendServiceProvider()
+    {
+
+    }
+
+
+CBtSendServiceProvider::~CBtSendServiceProvider()
+    {
+    if(iConverter)
+        {
+        delete iConverter;
+        iConverter= NULL;
+        }
+    if(iBTSendingService)
+        {
+        delete iBTSendingService;
+        iBTSendingService = NULL;
+        }
+    }
+
+
+int CBtSendServiceProvider::send(const QList<QVariant> &arguments)
+    {
+    TInt error = KErrNone; 
+    
+    CBTServiceParameterList* parameterList = NULL;
+    TRAP(error,parameterList= CBTServiceParameterList::NewL());
+    if (error)
+        return error;
+    iConverter->ConvertList( &arguments, parameterList);
+    
+    delete iConverter;
+    iConverter = NULL;
+
+    TRAP(error,iBTSendingService->StartSynchronousServiceL( EBTSendingService, parameterList ));
+    if(error)
+        return error;
+    return error;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/src/btsssendlisthandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2009-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:  Converter class implementation for converting AIW paramerer 
+*                list to bt send parameter list
+*
+*/
+
+
+
+#include "btsssendlisthandler.h"
+#include "BTServiceParameterList.h"
+
+#include <xqconversions.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CBTSSSendListHandler()
+// ---------------------------------------------------------------------------
+//
+CBTSSSendListHandler::CBTSSSendListHandler(): CActive( EPriorityNormal )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CBTSSSendListHandler::ConstructL()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewL()
+// ---------------------------------------------------------------------------
+//
+CBTSSSendListHandler* CBTSSSendListHandler::NewL()
+    {
+    CBTSSSendListHandler* self = CBTSSSendListHandler::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewLC()
+// ---------------------------------------------------------------------------
+//
+CBTSSSendListHandler* CBTSSSendListHandler::NewLC()
+    {
+    CBTSSSendListHandler* self = new( ELeave ) CBTSSSendListHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CBTSSSendListHandler
+// ---------------------------------------------------------------------------
+//
+CBTSSSendListHandler::~CBTSSSendListHandler()    
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::Destructor"));     
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// ConvertList()
+// ---------------------------------------------------------------------------
+//
+TInt CBTSSSendListHandler::ConvertList( const QList<QVariant> *arguments, 
+                                        CBTServiceParameterList* aList)
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::ConvertList"));           
+    iListIndex = 0;    
+    mArguments = arguments;
+    iList = aList;
+    iStatus = KRequestPending;
+    AddObject();
+    SetActive();
+    
+    iSyncWaiter.Start();
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::ConvertList done"));           
+    return iStatus.Int();
+    }
+
+// ---------------------------------------------------------------------------
+// AddObject()
+// ---------------------------------------------------------------------------
+//
+void CBTSSSendListHandler::AddObject()
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::AddObjectL()"));       
+    TRAPD(error, DoAddObjectL());
+    if (error != KErrNone )
+        {        
+        //Complete request
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete(status, error);
+        }
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::AddObjectL() Done"));           
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// RunL()
+// ---------------------------------------------------------------------------
+//
+void CBTSSSendListHandler::DoAddObjectL()
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL()"));   
+    
+ //   const TAiwGenericParam* param=&(*iOutParamList)[iListIndex];
+    
+    QString string = mArguments->at(iListIndex).toString();
+
+ /*   if ( param->SemanticId() != EGenericParamFile )
+        {
+        FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL() wrong semantic Id: Leave"));            
+        }
+      // Try to add file as an image
+      //       
+    if( param->Value().TypeId()== EVariantTypeFileHandle)
+        {           
+        TRAPD( retVal, iList->AddImageL( param->Value().AsFileHandle()  ));
+        FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL AddImage"));            
+        if( retVal != KErrNone )
+            {
+            // File was not an image. We can not use BIP 
+            // so add rest of the files as objects
+            //             
+            FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL AddImage filed try object"));            
+            iList->AddObjectL( param->Value().AsFileHandle() );
+            }            
+        }
+    else */
+ //       {           
+       // TRAPD( retVal, iList->AddImageL( param->Value().AsDes() ) );
+        HBufC* path = XQConversions::qStringToS60Desc(string);
+        TRAPD( retVal, iList->AddImageL(*path));
+        if( retVal != KErrNone )
+            {
+            // File was not an image. We can not use BIP 
+            // so add rest of the files as objects
+            //                
+            iList->AddObjectL( *path );
+            }
+  //      }
+      //Complete request
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+      
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL() completed"));  
+    }
+// ---------------------------------------------------------------------------
+// From class CActive.
+// RunL()
+// ---------------------------------------------------------------------------
+//
+void CBTSSSendListHandler::RunL()
+    {
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL()"));       
+    iListIndex++;
+    if ( mArguments->count() > iListIndex && iStatus.Int() == KErrNone )
+        {        
+        iStatus = KRequestPending;
+        AddObject();
+        SetActive();
+        }
+    else
+        {
+        if ( iSyncWaiter.IsStarted() )
+            {
+            iSyncWaiter.AsyncStop();
+            }
+        }
+    FLOG(_L("[BTSS]\t CBTSSSendListHandler::DoAddObjectL() Done"));           
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/src/main.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* 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:  ?Description
+*
+*/
+
+ 
+#include <hbapplication.h>
+#include "btsendserviceinterface.h"
+
+int main(int argc, char **argv)
+    {
+    QCoreApplication app(argc, argv);
+    BTSendServiceInterface btSendSI;
+    return app.exec();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexhighway/xml/obexhighway_conf.xml	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>  
+<service>
+  <name>obexhighway</name>
+  <filepath>No path</filepath>
+  <description>BT Send Service</description>
+  <interface>
+     <name>com.nokia.symbian.IFileShare</name>
+     <version>1.0</version>
+     <description>Send interface</description>
+     <customproperty key="txt_aiw_action_text">Via Bluetooth</customproperty>
+    <customproperty key="aiw_action_text_file">bluetooth</customproperty>
+    <customproperty key="aiw_action_text">txt_send_via_bluetooth</customproperty>
+  </interface>
+</service>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/bmarm/BTSERVICEUTILSU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,10 @@
+EXPORTS
+	StartSynchronousServiceL__13CBTServiceAPI14TBTServiceTypeP23CBTServiceParameterList @ 1 NONAME R3UNUSED ; CBTServiceAPI::StartSynchronousServiceL(TBTServiceType, CBTServiceParameterList *)
+	AddObjectL__23CBTServiceParameterListRC7TDesC16 @ 2 NONAME R3UNUSED ; CBTServiceParameterList::AddObjectL(TDesC16 const &)
+	AddXhtmlL__23CBTServiceParameterListRC7TDesC16 @ 3 NONAME R3UNUSED ; CBTServiceParameterList::AddXhtmlL(TDesC16 const &)
+	NewLC__23CBTServiceParameterList @ 4 NONAME R3UNUSED ; CBTServiceParameterList::NewLC(void)
+	NewL__13CBTServiceAPI @ 5 NONAME R3UNUSED ; CBTServiceAPI::NewL(void)
+	NewL__23CBTServiceParameterList @ 6 NONAME R3UNUSED ; CBTServiceParameterList::NewL(void)
+	StartServiceL__13CBTServiceAPI14TBTServiceTypeP23CBTServiceParameterList @ 7 NONAME R3UNUSED ; CBTServiceAPI::StartServiceL(TBTServiceType, CBTServiceParameterList *)
+	AddImageL__23CBTServiceParameterListRC7TDesC16 @ 8 NONAME R3UNUSED ; CBTServiceParameterList::AddImageL(TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/bwins/BTSERVICEUTILSU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+	?AddImageL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 1 NONAME ; void CBTServiceParameterList::AddImageL(class TDesC16 const &)
+	?AddImageL@CBTServiceParameterList@@QAEXVRFile@@@Z @ 2 NONAME ; void CBTServiceParameterList::AddImageL(class RFile)
+	?AddObjectL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 3 NONAME ; void CBTServiceParameterList::AddObjectL(class TDesC16 const &)
+	?AddObjectL@CBTServiceParameterList@@QAEXVRFile@@@Z @ 4 NONAME ; void CBTServiceParameterList::AddObjectL(class RFile)
+	?AddXhtmlL@CBTServiceParameterList@@QAEXABVTDesC16@@@Z @ 5 NONAME ; void CBTServiceParameterList::AddXhtmlL(class TDesC16 const &)
+	?NewL@CBTServiceAPI@@SAPAV1@XZ @ 6 NONAME ; class CBTServiceAPI * CBTServiceAPI::NewL(void)
+	?NewL@CBTServiceParameterList@@SAPAV1@XZ @ 7 NONAME ; class CBTServiceParameterList * CBTServiceParameterList::NewL(void)
+	?NewLC@CBTServiceParameterList@@SAPAV1@XZ @ 8 NONAME ; class CBTServiceParameterList * CBTServiceParameterList::NewLC(void)
+	?StartServiceL@CBTServiceAPI@@QAEXW4TBTServiceType@@PAVCBTServiceParameterList@@@Z @ 9 NONAME ; void CBTServiceAPI::StartServiceL(enum TBTServiceType, class CBTServiceParameterList *)
+	?StartSynchronousServiceL@CBTServiceAPI@@QAEXW4TBTServiceType@@PAVCBTServiceParameterList@@@Z @ 10 NONAME ; void CBTServiceAPI::StartSynchronousServiceL(enum TBTServiceType, class CBTServiceParameterList *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/eabi/BtServiceUtilsU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,16 @@
+EXPORTS
+	_ZN13CBTServiceAPI13StartServiceLE14TBTServiceTypeP23CBTServiceParameterList @ 1 NONAME
+	_ZN13CBTServiceAPI24StartSynchronousServiceLE14TBTServiceTypeP23CBTServiceParameterList @ 2 NONAME
+	_ZN13CBTServiceAPI4NewLEv @ 3 NONAME
+	_ZN23CBTServiceParameterList10AddObjectLE5RFile @ 4 NONAME
+	_ZN23CBTServiceParameterList10AddObjectLERK7TDesC16 @ 5 NONAME
+	_ZN23CBTServiceParameterList4NewLEv @ 6 NONAME
+	_ZN23CBTServiceParameterList5NewLCEv @ 7 NONAME
+	_ZN23CBTServiceParameterList9AddImageLE5RFile @ 8 NONAME
+	_ZN23CBTServiceParameterList9AddImageLERK7TDesC16 @ 9 NONAME
+	_ZN23CBTServiceParameterList9AddXhtmlLERK7TDesC16 @ 10 NONAME
+	_ZTI13CBTServiceAPI @ 11 NONAME ; #<TI>#
+	_ZTI23CBTServiceParameterList @ 12 NONAME ; #<TI>#
+	_ZTV13CBTServiceAPI @ 13 NONAME ; #<VT>#
+	_ZTV23CBTServiceParameterList @ 14 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTConnectionTimer.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* 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:  Waiter class
+*
+*/
+
+
+
+#ifndef BTCONNECTION_TIMER_H
+#define BTCONNECTION_TIMER_H
+
+//  INCLUDES
+#include <e32base.h> // CTimer
+#include "BTServiceClient.h"
+
+// CLASS DECLARATION
+
+
+
+// CLASS DECLARATION
+
+/**
+*  A timer object for waiting server connections.
+*/
+NONSHARABLE_CLASS (CBTConnectionTimer) : public CTimer
+    {
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTConnectionTimer* NewL( MBTConTimeObserver* aObserver );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTConnectionTimer();
+
+    private: // Functions from base classes
+
+        /**
+        * From CActive Get's called when the timer expires.
+        * @param None.
+        * @return None.
+        */
+        void RunL();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTConnectionTimer( MBTConTimeObserver* aObserver );        
+        
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+    public:
+        /**
+         * Set timeout value
+         * @aTimeOutValue timeout value
+         * @return None.
+         */
+        void SetTimeOut(TTimeIntervalMicroSeconds32 aTimeOutValue);      
+        
+        /**
+         * Start
+         * @aTimeOutValue timeout value
+         * @return None.
+         */
+        void Start();      
+
+    private: // Data
+
+        // Not owned
+        //
+        MBTConTimeObserver* iObserver;
+        TTimeIntervalMicroSeconds32 iTimeOutValue;
+    };
+
+#endif      // BTCONNECTION_TIMER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBIPController.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2002 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:  Image push controller
+*
+*/
+
+
+
+#ifndef BT_BIP_CONTROLLER_H
+#define BT_BIP_CONTROLLER_H
+
+//  INCLUDES
+#include "BTServiceClient.h"
+#include "BTServiceStarter.h"
+#include "BTSController.h"
+
+// CLASS DECLARATION
+
+/**
+*  Control class for the Image sending
+*/
+NONSHARABLE_CLASS (CBTSBIPController) : public CBTSController, 
+                                        public MBTServiceClientObserver                                    
+
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSBIPController* NewL( MBTServiceObserver* aObserver,
+            const TUint aRemotePort,
+            const TBTDevAddr& aRemoteDevice,
+            CBTServiceParameterList* aList  );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSBIPController();
+
+    private: // Functions from base classes
+
+        /**
+        * From MBTServiceClientObserver A Connect operation has been completed.
+        * @param aStatus The status of the operation.
+        * @return None.
+        */
+        void ConnectCompleted( TInt aStatus );
+
+        /**
+        * From MBTServiceClientObserver The client connection has been closed.
+        * @param None.
+        * @return None.
+        */
+        void ClientConnectionClosed();
+
+        /**
+        * From MBTServiceClientObserver A Put operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aPutResponse Response packet from remote device.
+        * @return None.
+        */
+        void PutCompleted( TInt aStatus, const CObexHeaderSet* aPutResponse );
+        
+        /**
+        * From MBTServiceClientObserver A Get operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aGetResponse Response packet from remote device.
+        * @return None.
+        */
+        void GetCompleted( TInt aStatus, CObexBufObject* aGetResponse );
+        
+        /**
+        * From MBTServiceClientObserver A Connect operation is timed out.
+        * @return None.
+        */
+        void ConnectTimedOut();
+        
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSBIPController( MBTServiceObserver* aObserver,
+                           CBTServiceParameterList* aList );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TUint aRemotePort,
+                         const TBTDevAddr& aRemoteDeviceAddr );
+    
+    private:
+
+        /**
+        * Send image 
+        * @param None.
+        * @return None.
+        */
+        void SendL();
+        
+        /**
+        * Send thumbnail image
+        * @param aPutResponse Response packet containing the image handle
+        * @return None.
+        */
+        void SendThumbnailL( const CObexHeaderSet* aPutResponse );
+
+        /**
+        * Get capabilities object from remote device 
+        * @param None.
+        * @return None.
+        */
+        void GetL();
+
+        /**
+        * Create temp file
+        * @param aFileName Name of the file that was created
+        * @return None.
+        */
+        void CreateTempFileL( TFileName& aFileName );
+        
+        /**
+        * Generate a temp file name
+        * @param aFileName File name that was created.
+        * @return None.
+        */
+        void GenerateTempFileNameL( TFileName& aFileName );
+        
+        /**
+        * Delete a temp file 
+        * @param aFileName Name of the file.
+        * @return None.
+        */
+        void DeleteTempFile( TFileName& aFileName );
+
+        /**
+        * Create image descriptor 
+        * @param None.
+        * @return HBufC8*.
+        */
+        HBufC8* CreateImageDescriptorL();
+
+        /**
+        * Handle GetCompleteIndication
+        * @param aGetResponse Get response packet from remote device
+        * @return None.
+        */
+        void HandleGetCompleteIndicationL( CObexBufObject* aGetResponse );
+    
+    private:    // Data
+        
+        TInt                        iFileIndex;
+        TFileName                   iThumbnailFileName;
+        TFileName                   iTempFileName;
+		
+
+        // Not owned
+        //        
+        CBTServiceParameterList*    iListPtr;
+        MBTServiceObserver*         iObserverPtr;
+        
+    };
+
+#endif      // BT_BIP_CONTROLLER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPController.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002 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:  Basic printing controller
+*
+*/
+
+
+
+#ifndef BT_SERVICE_BPP_CONTROLLER_H
+#define BT_SERVICE_BPP_CONTROLLER_H
+
+//  INCLUDES
+#include <obexutilsdialog.h>
+#include "BTServiceStarter.h"
+#include "BTServiceParameterList.h"
+#include "BTServiceClient.h"
+#include "BTSBPPObjectServer.h"
+#include "BTSBPPServerWait.h"
+#include "BTSController.h"
+
+
+
+
+// CLASS DECLARATION
+
+/**
+*  A class controlling printing service using Basic Printing Profile.
+*/
+NONSHARABLE_CLASS (CBTSBPPController) : public CBTSController,                           
+                          public MBTServiceClientObserver,
+                          public MBTSBPPObjectServerObserver,
+                          public MBTSBPPServerWaitObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSBPPController* NewL( MBTServiceObserver* aObserver,                                                                              
+                                        const TUint aRemotePort,
+                                        const TBTDevAddr& aRemoteDevice,
+                                        const CBTServiceParameterList* aList,
+                                        CBTEngDiscovery* aBTEngDiscoveryPtr );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSBPPController();
+
+
+    private: // Functions from base classes
+
+        /**
+        * From MBTServiceClientObserver A Connect operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @return None.
+        */
+        void ConnectCompleted( TInt aStatus );
+
+        /**
+        * From MBTServiceClientObserver A Put operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aPutResponse The response object.
+        * @return None.
+        */
+        void PutCompleted( TInt aStatus,const  CObexHeaderSet* aPutResponse );
+
+        /**
+        * From MBTServiceClientObserver A Get operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aGetResponse The response object.
+        * @return None.
+        */
+        void GetCompleted( TInt aStatus, CObexBufObject* aGetResponse );
+
+        /**
+        * From MBTServiceClientObserver The client connection has been closed.
+        * @return None.
+        */
+        void ClientConnectionClosed();
+        
+        /**
+        * From MBTServiceClientObserver A filehandle can be reseted.
+        * @return None.
+        */
+        void ResetFileHandleL();
+        /**
+        * From MBTPSServerObserver An error in server has occurred.
+        * @param aError The error.
+        * @return None.
+        */
+        void ServerError( TInt aError );
+
+        /**
+        * From MBTPSServerObserver The server connection has been established.
+        * @param None.
+        * @return None.
+        */
+        void ServerConnectionEstablished();
+
+        /**
+        * From MBTPSServerObserver The server connection has been closed.
+        * @param None.
+        * @return None.
+        */
+        void ServerConnectionClosed();
+
+        /**
+        * From MBTPSServerWaitObserver The server wait has completed.
+        * @param None.
+        * @return None.
+        */
+        void WaitComplete();
+        
+        /**
+        * From MBTServiceClientObserver A Connect operation is timed out.
+        * @return None.
+        */
+        void ConnectTimedOut();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSBPPController( MBTServiceObserver* aObserver,
+                           const CBTServiceParameterList* aList );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TBTDevAddr& aRemoteDevice,
+                         const TUint aRemotePort,
+                         CBTEngDiscovery* aBTEngDiscoveryPtr );
+
+        /**
+        * Selects the next document to send and issues a send request 
+        * to Obex client.
+        * @return None.
+        */
+        void SelectAndSendL();
+    
+    private:    // Data definitions
+
+        enum TBTSBPPObjectServerState
+            {
+            EBTSBPPSrvIdle,
+            EBTSBPPSrvServing,
+            EBTSBPPSrvDone
+            };
+
+    private:    // Data
+        
+        // Owned
+        //
+        CBTSBPPObjectServer*        iServer;
+        CBTSBPPServerWait*          iServerWait;
+
+        TInt                        iSendIndex;
+        TUint                       iClientChannel;
+        TBTSBPPObjectServerState    iServerState;
+        TBool                       iClientDone;
+
+        // Not owned
+        //
+        MBTServiceObserver*         iObserverPtr;
+        const CBTServiceParameterList* iListPtr;
+        
+    };
+
+#endif      // BT_SERVICE_BPP_CONTROLLER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPObjectRequest.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2002 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:  GetReferencedObjects -operation controller
+*
+*/
+
+
+
+#ifndef BTSBPP_OBJECT_REQUEST_H
+#define BTSBPP_OBJECT_REQUEST_H
+
+//  INCLUDES
+#include <obex.h>   // Obex
+#include <badesca.h>// CDesCArray
+
+// CLASS DECLARATION
+/**
+*  A class handling GetReferencedObjects -operation.
+*/
+NONSHARABLE_CLASS (CBTSBPPObjectRequest) : public CBase
+    {
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSBPPObjectRequest* NewL( CObexBaseObject* aGetOperation,
+                                           const CDesCArray* aRefObjectList );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSBPPObjectRequest();
+
+    public: // Functions from base classes
+
+        /**
+        * Returns the requested Object.
+        * @param None.
+        * @return A pointer to the requested object. NULL if the request 
+        *         cannot be fullfilled.
+        */
+        CObexBufObject* GetResponse();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSBPPObjectRequest( CObexBaseObject* aGetOperation,
+                            const CDesCArray* aRefObjectList );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // CHECK REQUEST ------------------------------------------------------
+
+        /**
+        * Checks the validity of the Get-operation and it's parameters.
+        * @return None.
+        */
+        void CheckGetRequestL();
+
+        /**
+        * Checks the existence, validity and contents of Type header.        
+        * @return None.
+        */
+        void CheckTypeHeaderL();
+
+        /**
+        * Checks the existence, validity and contents of Name header.        
+        * @return None.
+        */
+        void CheckNameHeaderL();
+
+        /**
+        * Checks the existence, validity and contents of 
+        * Application Parameters header.        
+        * @return None.
+        */
+        void CheckAppParamsHeaderL();
+
+
+        // EXECUTE REQUEST ----------------------------------------------------
+
+        /**
+        * Executes any tasks needed and creates the requested object.        
+        * @return None.
+        */
+        void ExecuteGetRequestL();
+        
+        /**
+        * Resolves the actual part of data that is requested.
+        * @return None.
+        */
+        void ResolveGetRequestL();
+
+        /**
+        * Reads the requested part of a file into a buffer.        
+        * @return None.
+        */
+        void ReadFileToBufferL();
+
+        /**
+        * Creates the response object with correct data and headers.        
+        * @return None.
+        */
+        void CreateResponseObjectL();
+
+    private: // Data definitions
+
+        struct TBTSBPPObjectParams
+            {
+            const TDesC* iName; // The name of the object.
+            TInt  iFileSize; // The total size of the object.
+            TInt  iOffset;   // The offset to the the object (starting point).
+            TInt  iCount;    // The number of bytes to be sent.
+            };
+
+    private:    // Data
+
+        RFs                     iFileSession;
+        TBTSBPPObjectParams     iRequestParams;
+        CObexBufObject*         iResponse;
+        CBufFlat*               iResponseBuffer;
+
+        // Not owned
+        //
+        CObexBaseObject*        iRequest;
+        const CDesCArray*       iObjectList;
+    };
+
+#endif      // BTSBPP_OBJECT_REQUEST_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPObjectServer.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2002 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:  Server part of basic printing profile
+*
+*/
+
+
+
+#ifndef BTSBPP_OBJECT_SERVER_H
+#define BTSBPP_OBJECT_SERVER_H
+
+//  INCLUDES
+//#include "BTSBPPPasskeyRequest.h"
+
+#include <obex.h>       // Obex
+#include <badesca.h>    // CDesCArray
+#include <btengdiscovery.h>
+#include "BTServiceStarter.h"
+
+// FORWARD DECLARATIONS
+class CBTSBPPObjectRequest;
+
+// CLASS DECLARATION
+
+/**
+*  An interface used to inform about CBTSBPPObjectServer events.
+*/
+class MBTSBPPObjectServerObserver
+    {
+    public:
+
+        /**
+        * Informs the observer that an error has been occurred.
+        * @param aError The error.
+        * @return None.
+        */
+        virtual void ServerError( TInt aError ) = 0;
+
+        /**
+        * Informs the observer that the server connection has been established.
+        * @param None.
+        * @return None.
+        */
+        virtual void ServerConnectionEstablished() = 0;
+
+        /**
+        * Informs the observer that the server connection has been closed.
+        * @param None.
+        * @return None.
+        */
+        virtual void ServerConnectionClosed() = 0;
+    };
+
+// CLASS DECLARATION
+
+/**
+*  A class managing the Obex Server.
+*/
+NONSHARABLE_CLASS (CBTSBPPObjectServer) : public CBase, 
+                            public MObexServerNotify,                    
+                            public MObexAuthChallengeHandler
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSBPPObjectServer* NewL( MBTSBPPObjectServerObserver* aObserver,
+                                          CBTEngDiscovery* aBTEngDiscoveryPtr,
+                                          const TBTDevAddr& aExpectedClient );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSBPPObjectServer();
+
+    public: // New functions
+
+        /**
+        * Gives the server a list of referenced objects that can be requested.
+        * by the printer. This method should be called always before sending
+        * any documents. 
+        * @param aRefObjectList A pointer to the list.
+        * @return None.
+        */
+        void SetReferencedObjectList( const CDesCArray* aRefObjectList );
+
+        /**
+        * Tells whether the current referenced object list has any items.
+        * @param aRefObjectList A pointer to the list.
+        * @return None.
+        */
+        TBool HasReferencedObjects();
+
+    private: // Functions from base classes
+
+        /**
+        * From MObexAuthChallengeHandler Get's called when Obex Password is 
+        * requested.
+        * @param aRealm The realm/challenge specified by the unit forcing 
+        *               the authentication.
+        * @return None.
+        */
+        void GetUserPasswordL( const TDesC& aRealm );
+
+    private: // Functions from MObexServerNotify
+
+        /**
+        * Informs about an error in Obex connection.
+        * @param aError The occurred error.
+        * @return None.
+        */
+        void ErrorIndication( TInt aError );
+
+        /**
+        * Informs that Obex transport layer is up.
+        * @return None.
+        */
+        void TransportUpIndication();
+
+        /**
+        * Informs that Obex transport layer is down.
+        * @return None.
+        */
+        void TransportDownIndication();
+
+        /**
+        * Informs about Obex connect request.
+        * @param aRemoteInfo Information about the remote party.
+        * @param aInfo Information about the connection request.
+        * @return Symbian OS error code.
+        */
+        TInt ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, 
+                                    const TDesC8& aInfo );
+
+        /**
+        * Informs about Obex disconnect request.
+        * @param aInfo Information about the disconnect request.
+        * @return None.
+        */
+        void ObexDisconnectIndication( const TDesC8& aInfo );
+
+        /**
+        * Informs about Obex put request.
+        * @return The requested object or NULL;
+        */
+        CObexBufObject* PutRequestIndication();
+
+        /**
+        * Informs that part of the put object is sent.
+        * @return Symbian OS error code.
+        */
+        TInt PutPacketIndication();
+
+        /**
+        * Informs that the put request is completed.
+        * @return Symbian OS error code.
+        */
+        TInt PutCompleteIndication();
+
+        /**
+        * Informs about Obex put request.
+        * @param aRequiredObject The Get request object.
+        * @return The response object or NULL;
+        */
+        CObexBufObject* GetRequestIndication( 
+        CObexBaseObject* aRequiredObject );
+
+        /**
+        * Informs that part of the get response object is sent.
+        * @return Symbian OS error code.
+        */
+        TInt GetPacketIndication();
+
+        /**
+        * Informs that the get request is completed.
+        * @return Symbian OS error code.
+        */
+        TInt GetCompleteIndication();
+
+        /**
+        * Informs about Obex Set Path request.
+        * @param aPathInfo Information about the path.
+        * @param aInfo Information about the Set Path request.
+        * @return Symbian OS error code.
+        */
+        TInt SetPathIndication( const CObex::TSetPathInfo& aPathInfo, 
+                                const TDesC8& aInfo );
+
+        /**
+        * Informs about Obex Abort operation.
+        * @return None.
+        */
+        void AbortIndication();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSBPPObjectServer( MBTSBPPObjectServerObserver* aObserver,
+                             CBTEngDiscovery* aBTEngDiscoveryPtr,
+                             const TBTDevAddr& aExpectedClient );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        TInt                            iObjectChannel;
+        TSdpServRecordHandle            iSDPHandle;
+
+        CObexServer*                    iServer;
+        CBTSBPPObjectRequest*           iObjectRequest;
+        //CBTSBPPPasskeyRequest*        iPasskeyRequest;        
+
+        // Not owned
+        //
+        const CDesCArray*               iObjectListPtr;
+        const TBTDevAddr*               iExpectedClientPtr;
+        CBTEngDiscovery*                iBTEngDiscoveryPtr;
+        MBTSBPPObjectServerObserver*    iObserverPtr;
+    };
+
+#endif      // BTSBPP_OBJECT_SERVER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSBPPServerWait.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2002 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:  Waiter class
+*
+*/
+
+
+
+#ifndef BTSBPP_SERVER_WAIT_H
+#define BTSBPP_SERVER_WAIT_H
+
+//  INCLUDES
+#include <e32base.h> // CTimer
+
+// CLASS DECLARATION
+
+/**
+*  An interface used to inform about CBTSBPPServerWait completion.
+*/
+class MBTSBPPServerWaitObserver
+    {
+    public:
+
+        /**
+        * Informs the observer that the waiting has been completed.
+        * @param None.
+        * @return None.
+        */
+        virtual void WaitComplete() = 0;
+    };
+
+// CLASS DECLARATION
+
+/**
+*  A timer object for waiting server connections.
+*/
+NONSHARABLE_CLASS (CBTSBPPServerWait) : public CTimer
+    {
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSBPPServerWait* NewL( MBTSBPPServerWaitObserver* aObserver );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSBPPServerWait();
+
+    private: // Functions from base classes
+
+        /**
+        * From CActive Get's called when the timer expires.
+        * @param None.
+        * @return None.
+        */
+        void RunL();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSBPPServerWait( MBTSBPPServerWaitObserver* aObserver );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // Data
+
+        // Not owned
+        //
+        MBTSBPPServerWaitObserver* iObserver;
+    };
+
+#endif      // BTSBPP_SERVER_WAIT_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSController.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2007-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:  Profile controller interface
+*
+*/
+
+
+
+#ifndef C_BTPROFILECONTROLLER_H
+#define C_BTPROFILECONTROLLER_H
+
+
+#include <e32base.h> 
+
+#include "BTServiceClient.h"
+
+
+class CBTServiceClient;
+
+/**
+ *  ProfileControllerIntreface definition 
+ * 
+ *  @endcode
+ *
+ *  @lib ?library
+ *  @since S60 v.3.2
+ */
+NONSHARABLE_CLASS (CBTSController) : public CBase
+    {
+
+public: 
+
+    CBTSController(); 
+    /**
+     * Destructor.
+     */
+    virtual ~CBTSController();
+
+    /**
+     * Abort command to client
+     *
+     * @since S60 v.3.2     
+     * @return None
+     */
+     void Abort( );
+
+protected:
+    
+    /**
+     * Create client
+     *
+     * @since S60 v.3.2     
+     * @return None
+     */
+     void CreateClientL(MBTServiceClientObserver* aObserver,
+                       const TBTDevAddr& aRemoteDevice,
+                       const TUint aRemotePort,
+                       RArray<CObexHeader*> aHeaderList );    
+
+
+protected: // data
+
+    /**
+     * Service client
+     * Not own. 
+     */
+    CBTServiceClient*           iClient;
+
+    };
+
+
+#endif // C_BTPROFILECONTROLLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSOPPController.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 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:  Object push controller
+*
+*/
+
+
+
+#ifndef BT_OPP_CONTROLLER_H
+#define BT_OPP_CONTROLLER_H
+
+//  INCLUDES
+#include "BTServiceClient.h"
+#include "BTServiceStarter.h"
+#include "BTSController.h"
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  Control class for the Object sending
+*/
+NONSHARABLE_CLASS (CBTSOPPController) : public CBTSController, 
+                                        public MBTServiceClientObserver                                        
+
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSOPPController* NewL( MBTServiceObserver* aObserver,
+            const TUint aRemotePort,
+            const TBTDevAddr& aRemoteDevice,
+            CBTServiceParameterList* aList  );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSOPPController();
+
+    private: // Functions from base classes
+
+        /**
+        * From MBTServiceClientObserver A Connect operation has been completed.
+        * @param aStatus The status of the operation.
+        * @return None.
+        */
+        void ConnectCompleted( TInt aStatus );
+
+        /**
+        * From MBTServiceClientObserver The client connection has been closed.
+        * @param None.
+        * @return None.
+        */
+        void ClientConnectionClosed();
+
+        /**
+        * From MBTServiceClientObserver A Put operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aPutResponse Response packet from remote device.
+        * @return None.
+        */
+        void PutCompleted( TInt aStatus, const CObexHeaderSet* aPutResponse );
+        
+        /**
+        * From MBTServiceClientObserver A Get operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aGetResponse Response packet from remote device.
+        * @return None.
+        */
+        void GetCompleted( TInt aStatus, CObexBufObject* aGetResponse );
+        
+        /**
+        * From MBTServiceClientObserver A Connect operation is timed out.
+        * @return None.
+        */
+        void ConnectTimedOut();
+        
+  
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSOPPController( MBTServiceObserver* aObserver,
+                           CBTServiceParameterList* aList );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TUint aRemotePort,
+                         const TBTDevAddr& aRemoteDeviceAddr );
+    
+    private:
+
+        /**
+        * Send file 
+        * @param None.
+        * @return None.
+        */
+        void Send();
+
+        /**
+        * Handle Connection indication 
+        * @param None.
+        * @return None.
+        */
+        void HandleConnectCompleteIndicationL();
+        
+        void UpdateProgressNoteL();
+
+    private:    // Data
+        
+        TInt                        iFileIndex;
+        // Not owned
+        //        
+        CBTServiceParameterList*    iListPtr;
+        MBTServiceObserver*         iObserverPtr;
+    };
+
+#endif      // BT_OPP_CONTROLLER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSProgresstimer.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2002 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 BTSPROGRESSTIMER_H
+#define BTSPROGRESSTIMER_H
+
+
+#include    <e32base.h>
+
+class MBTServiceObserver;
+
+// CLASS DECLARATION
+/**
+*  A timer class for updating progress dialog.
+*/
+NONSHARABLE_CLASS( CBTSProgressTimer ) : public CTimer
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */                           
+        static CBTSProgressTimer* NewL( MBTServiceObserver* aProgressObserverPtr );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSProgressTimer();
+     
+    public: // New functions
+
+        /**
+        * Sets the timeout of the timer.
+        * @param aTimeout The timeout in microseconds.
+        * @return None.
+        */
+        void SetTimeout( TTimeIntervalMicroSeconds32 aTimeout );
+
+        /**
+        * Restarts the timer.
+        * @return None.
+        */
+        void Tickle();
+
+    private: // Functions from base classes
+
+        /**
+        * From CTimer Get's called when the timer expires.        
+        * @return None.
+        */
+        void RunL();
+        
+        TInt RunError( TInt aError );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSProgressTimer( MBTServiceObserver* aProgressObserverPtr );
+        
+        /**
+        * By default Symbian OS constructor is private.
+        */      
+        void ConstructL();
+
+    private: // Data
+        TTimeIntervalMicroSeconds32 iTimeout;
+        MBTServiceObserver* iProgressObserverPtr;
+    };
+
+#endif      // BTSPROGRESSTIMER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUCapabilityResolver.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2002 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:  Capability resolver
+*
+*/
+
+
+#ifndef BTSU_CAPABILITY_RESOLVER_H
+#define BTSU_CAPABILITY_RESOLVER_H
+
+// INCLUDES
+//#include <RXMLReader.h>
+// new headers
+#include <xml/contenthandler.h>
+#include <xml/parser.h> 
+
+
+#include <badesca.h>
+
+// CLASS DECLARATION
+
+/**
+*  A content handler class implementing MXMLContentHandler interface.
+*  Listens notifications and appends found capabilities to a given list.
+*/
+NONSHARABLE_CLASS (CBTSUCapabilityResolver) :public CBase, 
+                                             public Xml::MContentHandler 
+    {
+    public:  // Constructors and destructor
+    
+         /**
+        * Two-phased constructor.
+        */
+        static CBTSUCapabilityResolver* NewL( CDesCArrayFlat* aCapabilityList );
+        
+        
+        static CBTSUCapabilityResolver* NewL(  RArray<TBTSUImageCap>* aCapabilityList );        
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSUCapabilityResolver();
+        
+        /**
+        * Return capability object resolving status         
+        * @return A boolean according to status.
+        */   
+        TBool IsCompleted();
+
+    private:
+
+        /**
+        * From MContentHandler A notification telling about the beginning 
+        * of a document.
+        * @param  aDocParam     Specifies the various parameters of the document.
+        * @param  aErrorCode    is the error code. 
+        */	        
+        void OnStartDocumentL(const Xml::RDocumentParameters& aDocParam, TInt aErrorCode);        
+
+        /**
+        * From MContentHandler A notification telling about the end 
+        * of a document.
+        * @param  	aErrorCode is the error code. 
+					If this is not KErrNone then special action may be required.        
+        */		    
+	    void OnEndDocumentL(TInt aErrorCode);
+
+        /**
+        * From MContentHandler A notification telling about the beginning 
+        * of an element.
+        * @param				aElement is a handle to the element's details.
+        * @param				aAttributes contains the attributes for the element.
+        * @param				aErrorCode is the error code.        
+        * @return A boolean according to success.
+        */
+	    void OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, 
+								 TInt aErrorCode);   
+								 
+        /**
+        This method is a callback to indicate the end of the element has been reached.
+        @param				aElement is a handle to the element's details.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnEndElementL(const Xml::RTagInfo& aElement, TInt aErrorCode);
+        
+        /**
+        This method is a callback that sends the content of the element.
+        Not all the content may be returned in one go. The data may be sent in chunks.
+        When an OnEndElementL is received this means there is no more content to be sent.
+        @param				aBytes is the raw content data for the element. 
+        					The client is responsible for converting the data to the 
+        					required character set if necessary.
+        					In some instances the content may be binary and must not be converted.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnContentL(const TDesC8& aBytes, TInt aErrorCode);     
+        /**
+        This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping.
+        This method is always called before the corresponding OnStartElementL method.
+        @param				aPrefix is the Namespace prefix being declared.
+        @param				aUri is the Namespace URI the prefix is mapped to.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+    	void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, 
+    									   TInt aErrorCode);           								                         
+
+        /**
+        This method is a notification of the end of the scope of a prefix-URI mapping.
+        This method is called after the corresponding DoEndElementL method.
+        @param				aPrefix is the Namespace prefix that was mapped.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+       	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
+
+
+        /**
+        This method is a notification of ignorable whitespace in element content.
+        @param				aBytes are the ignored bytes from the document being parsed.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
+
+
+        /**
+        This method is a notification of a skipped entity. If the parser encounters an 
+        external entity it does not need to expand it - it can return the entity as aName 
+        for the client to deal with.
+        @param				aName is the name of the skipped entity.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
+
+
+        /**
+        This method is a receive notification of a processing instruction.
+        @param				aTarget is the processing instruction target.
+        @param				aData is the processing instruction data. If empty none was supplied.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, 
+        										  TInt aErrorCode);
+
+
+        /**
+        This method indicates an error has occurred.
+        @param				aError is the error code
+        */
+        void OnError(TInt aErrorCode);
+
+
+        /**
+        This method obtains the interface matching the specified uid.
+        @return				0 if no interface matching the uid is found.
+        					Otherwise, the this pointer cast to that interface.
+        @param				aUid the uid identifying the required interface.
+        */
+        TAny* GetExtendedInterface(const TInt32 aUid);
+        
+        /**
+        * C++ default constructor.
+        */               
+        CBTSUCapabilityResolver( CDesCArrayFlat* aCapabilityList );
+
+		/**
+        * C++ default constructor.
+        */          
+		CBTSUCapabilityResolver( RArray<TBTSUImageCap>* aCapabilityList );
+		
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+
+    private: // Data
+
+        // Not owned.
+        //
+        RArray<TBTSUImageCap>* iCapabilityList;
+        TBool                  iCompleted;
+    };
+
+#endif      // BTSU_CAPABILITY_RESOLVER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUDataConverter.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2002 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:  A data conversion class.
+*
+*/
+
+
+#ifndef BTSU_DATA_CONVERTER_H
+#define BTSU_DATA_CONVERTER_H
+
+// INCLUDES
+#include <e32std.h>
+
+// CONSTANTS
+
+// DATA TYPES
+
+// CLASS DECLARATION
+
+/**
+*   A class for executing data conversion
+*/
+class TBTSUDataConverter
+    {
+    public:
+
+        /**
+        * Converts the given data as integer.
+        * @param aData The data to be converted.
+        * @return The data converted as TUint8
+        */
+        static TUint8 ConvertByteL( const TPtrC8& aData );
+
+        /**
+        * Converts the given data as signed integer.
+        * @param aData The data to be converted.
+        * @return The data converted as TInt32.
+        */
+        static TInt32 ConvertDataSignedL( const TPtrC8& aData );
+
+        /**
+        * Converts the given data as unsigned integer.
+        * @param aData The data to be converted.
+        * @return The data converted as TUint32.
+        */
+        static TUint32 ConvertDataUnsignedL( const TPtrC8& aData );
+    };
+
+#endif      // BTSU_DATA_CONVERTER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUDebug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 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:  This file defines logging macros for BTSU.
+*
+*/
+
+
+#ifndef BT_SERVICE_UTILS_DEBUG_H
+#define BT_SERVICE_UTILS_DEBUG_H
+
+
+#ifdef _DEBUG
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"btsuLog.txt");
+_LIT(KLogDirFullName,"c:\\logs\\btsu\\");
+_LIT(KLogDir,"btsu");
+
+#define FLOG(a)   { FPrint(a); }
+#define FTRACE(a) { a; }
+
+// Declare the FPrint function
+//
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+#include <e32svr.h>
+
+#define FLOG(a)   { RDebug::Print(a); }
+#define FTRACE(a) { a; }
+
+// Declare the FPrint function
+//
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+    }
+
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(a)
+#define FTRACE(a)
+
+#endif // _DEBUG
+
+
+#endif // BT_SERVICE_UTILS_DEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUImageConverter.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2002 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:  Image conversion class
+*
+*/
+
+
+#ifndef BTSU_IMAGE_CONVERTER_H
+#define BTSU_IMAGE_CONVERTER_H
+
+// INCLUDES
+#include <f32file.h>
+#include <badesca.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CImageDecoder;
+class CImageEncoder;
+class CFrameImageData;
+class CBitmapScaler;
+class CFbsBitmap;
+
+// CLASS DECLARATION
+
+/**
+* A class for executing simple image conversion tasks.
+*/
+NONSHARABLE_CLASS (CBTSUImageConverter) : public CActive
+    {
+
+    public:  // Constructor and destructor
+
+        /**
+        * Two-phased constructor.        
+        * @param None.
+        */
+        static CBTSUImageConverter* NewL();
+
+        /**
+        * Destructor.
+        */
+        ~CBTSUImageConverter();
+
+    public: // New functions        
+
+        /**
+        * Returns the pixel size of the given image.
+        * @param aImageFile A file handle of image file.
+        * @return The pixel size.
+        */
+        TSize GetImageSizeL( RFile&  aImageFile );        
+
+        /**
+        * Create a thumbnail version of the source image.
+        * @param aSourceFile A filehandle of sourcefile.
+        * @param aDestFile   Full path for the destination file.
+        * @return None.
+        */
+        void CreateThumbnailL( RFile& aSourceFile, 
+                               const TDesC& aDestFile );
+
+        /**
+        * Finds a display name for the given mime type.
+        * @param aMimeType Mime type
+        * @return A pointer to the name.
+        */
+        static HBufC* GetDisplayNameL( const TDesC8& aMimeType );
+
+    private: // Functions from base classes
+
+        /**
+        * From CActive Get's called when a request is cancelled.
+        * @return None.
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Get's called when a request is completed.
+        * @return None.
+        */
+        void RunL();
+    
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSUImageConverter();
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+        * Decode image.
+        * @param aSourceFile A filehandle of source file.
+        * @return None
+        */
+        void DecodeImageL( RFile& aSourceFile );
+
+        /**
+        * Encode image.
+        * @param aDestFile Full path for the destination file.
+        * @param aThumbnail ETrue enables thumbnail creation
+        * @return None
+        */
+        void EncodeImageL( const TDesC& aDestFile,
+                           const TBool& aThumbnail = EFalse );
+
+        /**
+        * Scale image.
+        * @return None
+        */
+        void ScaleImageL();
+
+        /**
+        * Reset internal state.
+        * @return None.
+        */
+        void Reset();
+
+    private: // Data
+
+        CImageDecoder*              iDecoder;
+        CImageEncoder*              iEncoder;
+        CBitmapScaler*              iScaler;
+
+        CFrameImageData*            iFrameImageData;
+        CFbsBitmap*                 iFrameBitmap;
+        CFbsBitmap*                 iScaledBitmap;
+        RFs                         iFileSession;
+
+        CActiveSchedulerWait        iWait;
+    };
+
+
+#endif // BTSU_IMAGE_CONVERTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUPassKeyRequest.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 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:  CBTSUPasskeyRequest Header definitions
+*
+*/
+
+
+#ifndef BTSU_PASSKEY_REQUEST_H
+#define BTSU_PASSKEY_REQUEST_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <obexclient.h>
+#include <btnotif.h>
+
+// CLASS DECLARATION
+
+/**
+*  Class to handle BT Obex Passkey events
+*/
+NONSHARABLE_CLASS (CBTSUPasskeyRequest) : public CActive
+    {
+
+    public: // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSUPasskeyRequest();
+
+        /**
+        * Destructor.
+        * Closes RNotifier
+        */
+        ~CBTSUPasskeyRequest();
+
+    public: // New functions
+        /**
+        * Starts BT ObexPasskey notifier
+	    * @param aObexServer OBEX server
+        */
+        void StartPassKeyRequestL( CObexClient* aObexclient );
+
+    private: // Functions from base classes
+        /**
+        * From CActive Get's called when a request is cancelled.
+        * @param None.
+        * @return None.
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Get's called when a request is completed.
+        * @param None.
+        * @return None.
+        */
+        void RunL();
+
+        /**
+        * From CActive A leave occurred in RunL.
+        * @param aError The leave error.
+        * @return Symbian OS error code.
+        */
+        TInt RunError();
+
+    private: // Data
+
+        RNotifier iNotif;               // For Obex passkey notifier
+        TObexPasskeyBuf iObexPasskey;   // Obex passkey
+        CObexClient* iObexClient;       // Obex client
+    };
+
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSURefObjectResolver.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2002 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:  Reference object resolver
+*
+*/
+
+
+#ifndef BTSU_REF_OBJECT_RESOLVER_H
+#define BTSU_REF_OBJECT_RESOLVER_H
+
+// INCLUDES
+// new headers
+#include <xml/contenthandler.h>
+#include <xml/parser.h> 
+
+
+#include <badesca.h>
+
+// CLASS DECLARATION
+
+class Xml::RTagInfo;
+/**
+*  A content handler class implementing MContentHandler interface.
+*  Listens notifications and appends found objects to a given list.
+*/
+NONSHARABLE_CLASS (CBTSURefObjectResolver) : public Xml::MContentHandler 
+    {
+    public:  // Constructors and destructor
+        
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSURefObjectResolver* NewL( CDesCArrayFlat* aCapabilityList );        
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSURefObjectResolver();
+
+    private:
+
+        /**
+        * From MContentHandler A notification telling about the beginning 
+        * of a document.
+        * @param  aDocParam     Specifies the various parameters of the document.
+        * @param  aErrorCode    is the error code. 
+        */	        
+        void OnStartDocumentL(const Xml::RDocumentParameters& aDocParam, TInt aErrorCode);        
+
+        /**
+        * From MContentHandler A notification telling about the end 
+        * of a document.
+        * @param  	aErrorCode is the error code. 
+					If this is not KErrNone then special action may be required.        
+        */		    
+	    void OnEndDocumentL(TInt aErrorCode);
+
+        /**
+        * From MContentHandler A notification telling about the beginning 
+        * of an element.
+        * @param				aElement is a handle to the element's details.
+        * @param				aAttributes contains the attributes for the element.
+        * @param				aErrorCode is the error code.        
+        * @return A boolean according to success.
+        */        
+	    void OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, 
+								 TInt aErrorCode);   
+								 
+        /**
+        This method is a callback to indicate the end of the element has been reached.
+        @param				aElement is a handle to the element's details.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnEndElementL(const Xml::RTagInfo& aElement, TInt aErrorCode);
+        
+        /**
+        This method is a callback that sends the content of the element.
+        Not all the content may be returned in one go. The data may be sent in chunks.
+        When an OnEndElementL is received this means there is no more content to be sent.
+        @param				aBytes is the raw content data for the element. 
+        					The client is responsible for converting the data to the 
+        					required character set if necessary.
+        					In some instances the content may be binary and must not be converted.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnContentL(const TDesC8& aBytes, TInt aErrorCode);     
+        /**
+        This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping.
+        This method is always called before the corresponding OnStartElementL method.
+        @param				aPrefix is the Namespace prefix being declared.
+        @param				aUri is the Namespace URI the prefix is mapped to.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+    	void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, 
+    									   TInt aErrorCode);           								                         
+
+        /**
+        This method is a notification of the end of the scope of a prefix-URI mapping.
+        This method is called after the corresponding DoEndElementL method.
+        @param				aPrefix is the Namespace prefix that was mapped.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+       	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
+
+
+        /**
+        This method is a notification of ignorable whitespace in element content.
+        @param				aBytes are the ignored bytes from the document being parsed.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
+
+
+        /**
+        This method is a notification of a skipped entity. If the parser encounters an 
+        external entity it does not need to expand it - it can return the entity as aName 
+        for the client to deal with.
+        @param				aName is the name of the skipped entity.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
+
+
+        /**
+        This method is a receive notification of a processing instruction.
+        @param				aTarget is the processing instruction target.
+        @param				aData is the processing instruction data. If empty none was supplied.
+        @param				aErrorCode is the error code.
+        					If this is not KErrNone then special action may be required.
+        */
+        void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, 
+        										  TInt aErrorCode);
+
+
+        /**
+        This method indicates an error has occurred.
+        @param				aError is the error code
+        */
+        void OnError(TInt aErrorCode);
+
+
+        /**
+        This method obtains the interface matching the specified uid.
+        @return				0 if no interface matching the uid is found.
+        					Otherwise, the this pointer cast to that interface.
+        @param				aUid the uid identifying the required interface.
+        */
+        TAny* GetExtendedInterface(const TInt32 aUid);
+        
+        
+        /**
+        * C++ default constructor.
+        */               
+        CBTSURefObjectResolver( CDesCArrayFlat* aCapabilityList );	
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+        
+    private: // Data
+
+        // Not owned.
+        //
+        CDesCArrayFlat* iObjectList;
+    };
+
+#endif      // BTSU_REF_OBJECT_RESOLVER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTSUXmlParser.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2002 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:  XML parser
+*
+*/
+
+
+#ifndef BTSU_XML_PARSER_H
+#define BTSU_XML_PARSER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <badesca.h>
+//#include <RXMLReader.h>
+#include <f32file.h>
+#include <xml/parser.h>
+ 
+#include "BTServiceUtils.h"
+
+// CLASS DECLARATION
+
+/**
+*  A class for executing simple predetermined xml parsing tasks.
+*/
+NONSHARABLE_CLASS (CBTSUXmlParser) : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTSUXmlParser* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTSUXmlParser();
+
+     public: // New functions
+        
+        /**
+        * Finds and collects image capabilites from the file.
+        * @param aFileName The name of the file to be parsed.
+        * @return A pointer to the list.
+        */
+        CDesCArrayFlat* GetCapabilityListL( const TDesC& aFileName );
+
+		
+        /**
+        * Finds and collects image capabilites from the file.
+        * @param aFileName The name of the file to be parsed.
+        * @return A pointer to the list.
+        */        
+        RArray<TBTSUImageCap>* GetImgCapabilityListL( const TDesC& aFileName );
+
+        /**
+        * Finds and collects paths to objects referenced in the file.
+        * @param aFileName The name of the file to be parsed.
+        * @return A pointer to the list.
+        */
+        CDesCArrayFlat* GetRefObjectListL( const TDesC& aFileName );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSUXmlParser();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+     private: // Data
+
+        RFs        iFileSession;
+    };
+
+#endif      // BTSU_XML_PARSER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceAPI.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2002 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:  API for sending services
+*
+*/
+
+
+
+#ifndef BT_SERVICE_API_H
+#define BT_SERVICE_API_H
+
+//  INCLUDES
+#include "BTServiceParameterList.h"
+
+// CONSTANTS
+
+// DATA TYPES
+
+enum TBTServiceType
+    {
+    EBTSendingService,
+    EBTPrintingService,
+    EBTObjectPushService // use this if support for only OPP is wanted
+    };
+
+// FORWARD DECLARATIONS
+class CBTServiceStarter;
+
+// CLASS DECLARATION
+
+/**
+*  An API for starting Bluetooth services.
+*
+*  @lib BtServiceUtils.lib
+*  @since Series 60 2.6
+*/
+class CBTServiceAPI : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CBTServiceAPI* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTServiceAPI();
+
+    public: // New functions
+        
+        /**
+        * Starts the given service.
+        * Returns when service is started.
+        * @since Series 60 2.6
+        * @param aService The service to be started.
+        * @param aList Parameters for the service.
+        * @return None.
+        */
+        IMPORT_C void StartServiceL( TBTServiceType aService, 
+                                     CBTServiceParameterList* aList );
+
+        /**
+        * Starts the given service.
+        * Returns when service is completed.
+        * @since Series 60 2.6
+        * @param aService The service to be started.
+        * @param aList Parameters for the service.
+        * @return None.
+        */
+        IMPORT_C void StartSynchronousServiceL( TBTServiceType aService, 
+                                     CBTServiceParameterList* aList );
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTServiceAPI();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        CBTServiceStarter*      iStarter;
+        CActiveSchedulerWait    iSyncWaiter;
+    };
+
+#endif      // BT_SERVICE_API_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceClient.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2002 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:  Obex client
+*
+*/
+
+
+
+#ifndef BT_SERVICE_CLIENT_H
+#define BT_SERVICE_CLIENT_H
+
+//  INCLUDES
+#include "BTSUPassKeyRequest.h"
+
+#include <obex.h>
+#include <obexheaders.h>
+
+ 
+// FORWARD DECLARATION
+class CBTSUPasskeyRequest;
+class CBTConnectionTimer;
+
+// CLASS DECLARATION
+
+/**
+*  An interface used to inform about BT service client events.
+*/
+class MBTServiceClientObserver
+    {
+    public:
+
+        /**
+        * Informs the observer that a Connect operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @return None.
+        */
+        virtual void ConnectCompleted( TInt aStatus ) = 0;
+
+        /**
+        * Informs the observer that a Put operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aPutResponse The response object.
+        * @return None.
+        */
+        virtual void PutCompleted( TInt aStatus,const  CObexHeaderSet* aPutResponse ) = 0;
+
+        /**
+        * Informs the observer that a Get operation has been completed. 
+        * @param aStatus The status of the operation.
+        * @param aGetResponse The response object.
+        * @return None.
+        */
+        virtual void GetCompleted( TInt aStatus, CObexBufObject* aGetResponse ) = 0;
+
+        /**
+        * Informs the observer that the client connection has been closed.
+        * @return None.
+        */
+        virtual void ClientConnectionClosed() = 0;
+        
+        /**
+        * Informs the observer that the client connect is timed out.
+        * @return None.
+        */
+        virtual void ConnectTimedOut() = 0;
+        
+      
+    };
+
+/**
+*  An interface used to inform about BT Connection timeout
+*/    
+class MBTConTimeObserver    
+    {
+    public:
+        /**
+        * Informs the observer that the client connec is timeouted
+        * @return None.
+        */
+        virtual void ConnectionTimedOut()=0;
+    };
+
+
+// CLASS DECLARATION
+
+/**
+*  An interface used to ask client's progress status.
+*/
+class MBTServiceProgressGetter
+    {
+    public:
+
+        /**
+        * Returns the progess status of the service client.
+        * @return The number of bytes sent.
+        */
+        virtual TInt GetProgressStatus() = 0;
+    };
+
+// CLASS DECLARATION
+
+/**
+*  An active object managing the Obex client.
+*/
+NONSHARABLE_CLASS (CBTServiceClient) : public CActive,
+                         public MBTServiceProgressGetter,
+                         public MObexAuthChallengeHandler,
+                         public MBTConTimeObserver
+                         
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param aObserver A pointer to the client observer.
+        * @param aRemoteDevice The address of the remote device.
+        * @param aRemotePort The port of the remote device.
+        * @param aHeaderList The headers to be associated with connect object.
+        * @return None.
+        */
+        static CBTServiceClient* NewL( MBTServiceClientObserver* aObserver,
+                                       const TBTDevAddr& aRemoteDevice,
+                                       const TUint aRemotePort,
+                                       RArray<CObexHeader*> aHeaderList );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTServiceClient();
+
+    public: // New functions
+        
+        /**
+        * Issues an Obex Get-request.
+        * @param aHeaderList The headers to be associated with the object.
+        * @param aFileName A filename of the Get Object.
+        * @return None.
+        */
+        void GetObjectL( RArray<CObexHeader*>& aHeaderList, 
+                         const TDesC& aFileName = KNullDesC );
+
+        /**
+        * Issues an Obex Put-request.        
+        * @param aHeaderList The headers to be associated with the object.
+        * @param aFileName A filename of the Put Object.
+        * @return None.
+        */
+        void PutObjectL( RArray<CObexHeader*>& aHeaderList, 
+                         const TDesC& aFileName  );
+                         
+        /**
+        * Issues an Obex Put-request.        
+        * @param aHeaderList The headers to be associated with the object.
+        * @param aFile A filehandle of the Put Object.
+        * @return None.
+        */
+        void PutObjectL( RArray<CObexHeader*>& aHeaderList, 
+                         RFile&  );
+
+        /**
+        * Closes Obex Client connection.
+        * @param None.
+        * @return None.
+        */
+        void CloseClientConnection();
+        
+        /**
+        * Send abort command to remote device
+        * @param None.
+        * @return None.
+        */
+        void Abort();        
+
+    private: // Functions from base classes
+
+        /**
+        * From MBTServiceProgressGetter Returns the progess status.
+        * @return The number of bytes sent.
+        */
+        TInt GetProgressStatus();
+
+        
+    private: // Functions from base classes
+
+        /**
+        * From MObexAuthChallengeHandler The Obex Passkey is requested.
+        * @param aRealm The realm/challenge specified by the unit forcing 
+        * the authentication.
+        * @return None.
+        */
+        void GetUserPasswordL( const TDesC& aRealm );
+
+        /**
+        * From CActive Get's called when a request is cancelled.
+        * @param None.
+        * @return None.
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Get's called when a request is completed.
+        * @param None.
+        * @return None.
+        */
+	    void RunL();
+	    
+	    /**
+        * From MBTConTimeObserver  Get's called if bt connection is timed out.
+        * @param None.
+        * @return None.
+        */
+	    void ConnectionTimedOut();
+
+    private:    // Data definitions
+
+        enum TBTServiceClientState
+            {
+            EBTSCliIdle,
+            EBTSCliConnecting,
+            EBTSCliPutting,
+            EBTSCliGetting,
+            EBTSCliDisconnecting
+            };
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTServiceClient( MBTServiceClientObserver* aObserver );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TBTDevAddr& aRemoteDevice,
+                         const TUint aRemotePort,
+                         RArray<CObexHeader*> aHeaderList );
+
+    private:    // Data
+
+        TBTServiceClientState       iClientState;
+
+        CObexClient*                iClient;
+        CBufFlat*                   iObjectBuffer;
+        CObexBufObject*             iGetObject;
+        CObexFileObject*            iPutObject;        
+        CObexNullObject*            iConnectObject;
+        TInt                        iTotalBytesSent;
+        CBTSUPasskeyRequest*        iPasskeyRequest;
+        CBufFlat                    *iBuffer;
+        CObexBufObject*             iPutBufObject;
+        CBTConnectionTimer*         iConnectionTimer;
+        // Not owned
+        //
+        MBTServiceClientObserver*   iObserver;
+    };
+
+#endif      // BT_SERVICE_CLIENT_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceParameterList.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2002 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:  Parameter list
+*
+*/
+
+
+#ifndef BT_SERVICE_PARAMETER_LIST_H
+#define BT_SERVICE_PARAMETER_LIST_H
+
+// INCLUDES
+#include <e32std.h>
+#include <badesca.h>    // CDesCArray
+#include <f32file.h>
+
+// CONSTANTS
+
+// DATA TYPES
+
+struct TBTSUXhtmlParam
+    {
+    TDesC* iFileName;
+    CDesCArray* iRefObjectList;
+    };
+
+struct TBTSUImageParam
+    {    
+    RFile   iFile; 
+    TDesC*  iDisplayName;
+    TDesC8* iMimeType;
+    TSize   iPixelSize;
+    TInt    iFileSize;    
+    TBool   iSend;
+    
+    };
+    
+
+// CLASS DECLARATION
+
+/**
+*  A class holding paths to different types of files. 
+*
+*  In case of an XHTML file the list collects paths 
+*  to objects referenced in the file.
+*
+*  In case of an image the list resolves the MIME types and
+*  displayable names of the images.
+*
+*  @lib BtServiceUtils.lib
+*  @since Series 60 2.6
+*/
+class CBTServiceParameterList : public CBase
+    {
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CBTServiceParameterList* NewL();
+        IMPORT_C static CBTServiceParameterList* NewLC();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTServiceParameterList();
+
+    public: // New functions
+
+        /**
+        * Adds an xhtml file path to the list.
+        * @since Series 60 2.6
+        * @param aFilePath A full path and file name.
+        * @return None.
+        */
+        IMPORT_C void AddXhtmlL( const TDesC& aFilePath );
+
+        /**
+        * Adds an image file path to the list.
+        * @since Series 60 2.6
+        * @param aFilePath A full path and file name.
+        * @return None.
+        */
+        IMPORT_C void AddImageL( const TDesC& aFilePath );
+        
+        /**
+        * Adds an image file path to the list.
+        * @since Series 60 2.6
+        * @param aFile file handle to be send.
+        * @return None.
+        */
+        IMPORT_C void AddImageL( RFile aFile );
+
+        /**
+        * Adds an object file path to the list.
+        * @since Series 60 2.6
+        * @param aFilePath A full path and file name.
+        * @return None.
+        */
+        IMPORT_C void AddObjectL( const TDesC& aFilePath );
+        
+        /**
+        * Adds an object file path to the list.
+        * @since Series 60 2.6
+        * @param aFile file handle to be send .
+        * @return None.
+        */
+        IMPORT_C void AddObjectL( RFile aFile );
+
+    public: // New functions (not exported)
+        
+        /**
+        * Return the number of xhtml file paths in the list.
+        * @return The count.
+        */
+        TInt XhtmlCount() const;
+
+        /**
+        * Return the number of image file paths in the list.
+        * @return The count.
+        */
+        TInt ImageCount() const;
+
+        /**
+        * Return the number of object file paths in the list.
+        * @return The count.
+        */
+        TInt ObjectCount() const;
+        
+        /**
+        * Returns a copy of an element of the list from the given index.
+        * @param aIndex The index.
+        * @return The element.
+        */
+        TBTSUXhtmlParam XhtmlAt( TInt aIndex ) const;
+
+        /**
+        * Returns a copy of an element of the list from the given index.
+        * @param aIndex The index.
+        * @return The element.
+        */
+        TBTSUImageParam ImageAtL( TInt aIndex ) const;
+
+        /**
+        * Returns a copy of an element of the list from the given index.
+        * @param aIndex The index.
+        * @return The element.
+        */
+        RFile& ObjectAtL( TInt aIndex );
+
+        /**
+        * Checks whether the list has any xhtml-files with referenced objects.
+        * @return A boolean according to result.
+        */
+        TBool HasAnyReferencedObjects() const;
+
+        /**
+        * Return the size of objects in the list.
+        * @return The count.
+        */
+        TInt ObjectListSizeL() const;
+        
+        /**
+        * Return the size of images in the list.
+        * @return The count.
+        */
+        
+        TInt ImageListSize() const;
+        
+        /**
+        * Remove image from list.
+        * @param aIndex The index.
+        * @return None.
+        */
+        void RemoveImageL(TInt aIndex);
+        
+        /**
+        * Return count of removed image        
+        * @return The count of removed images.
+        */
+        TInt RemovedImageCount();
+        
+        /**
+        * Reset image filehandle
+        * @param aIndex The index.
+        * @return None.
+        */
+        void ResetImageHandleL(TInt aIndex);
+        
+        /**
+        * Reset object filehandle
+        * @param aIndex The index.
+        * @return None.
+        */
+        void ResetObjectHandleL(TInt aIndex);  
+        
+        
+        /**
+        * Reset image filehandle
+        * @param aIndex The index.
+        * @return None.
+        */
+        void MarkAsSendL(TInt aIndex);        
+                
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTServiceParameterList();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // Data
+
+        RArray<TBTSUXhtmlParam> iXhtmlList;
+        RArray<TBTSUImageParam> iImageList;
+        RArray<RFile> iObjectList;
+        RFs iFileSession;        
+        TInt iRemovedImageCount;
+    };
+
+#endif      // BT_SERVICE_PARAMETER_LIST_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceStarter.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,506 @@
+/*
+* Copyright (c) 2002-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:  Service starter
+*
+*/
+
+
+
+#ifndef BT_SERVICE_STARTER_H
+#define BT_SERVICE_STARTER_H
+
+//  INCLUDES
+#include "BTServiceAPI.h"
+#include "BTServiceUtils.h"
+#include "BTServiceParameterList.h"
+
+#include <btengdiscovery.h>
+#include <btengsettings.h>
+#include <obexutilsdialog.h>
+#include <msvapi.h>
+#include <hbdevicedialogsymbian.h>
+#include <hb/hbwidgets/hbdeviceprogressdialogsymbian.h>
+#include <hbsymbianvariant.h>
+
+// DATA TYPES
+
+enum TBTServiceProfile
+    {
+    EBTSNone,
+    EBTSBPP,
+    EBTSOPP,
+    EBTSBIP
+    };
+
+enum TBTActiveNotifier
+    {
+    ENoneQuery = 0,
+    EOfflineQuery,
+    ENameQuery
+    };
+
+// FORWARD DECLARATIONS
+class CObexUtilsUiLayer;
+class MBTServiceProgressGetter;
+class CBTSController;
+class CBTSProgressTimer;
+
+
+const TUint KBTSdpObjectPush            = 0x1105;
+const TUint KBTSdpBasicImaging          = 0x111b;
+const TUint KBTSdpBasicPrinting         = 0x1120;
+
+
+// CLASS DECLARATION
+
+/**
+*  An observer interface for service controllers.
+*/
+class MBTServiceObserver
+    {
+    public: // New functions
+
+        /**
+        * Informs the observer that the handler has completed its tasks.
+        * @param aStatus The the completion status of the handler.
+        * @return None.
+        */
+        virtual void ControllerComplete( TInt aStatus ) = 0;
+
+        /**
+        * Informs the observer that a progress note should be shown.
+        * @param aGetter A pointer to a progess status getter object.
+        * @return None.
+        */
+        virtual void LaunchProgressNoteL( MBTServiceProgressGetter* aGetter, TInt aTotalSize, TInt aFileCount ) = 0;
+        
+        
+        /**
+        * Informs the observer that a progress note should be shown.
+        * @param aGetter A pointer to a progess status getter object.
+        * @return None.
+        */
+        virtual void UpdateProgressNoteL(TInt aFileSize,TInt aFileIndex, const TDesC& aFileName ) = 0;
+        
+
+        /**
+        * Informs the observer that a progress note should be shown.
+        * @param aGetter A pointer to a progess status getter object.
+        * @return None.
+        */
+        virtual void UpdateProgressInfoL() = 0;
+        
+        
+        /**
+        *  Informs the observer that a confirmation query for sending
+        *  should be shouwn for BIP sendign
+        *  @return
+        */ 
+        virtual TInt LaunchConfirmationQuery(TInt aResouceId)=0;        
+        
+        /**
+        *  Informs the observer that a connect is timedout        
+        *  @return
+        */ 
+        virtual void ConnectTimedOut()=0;
+       
+    };
+
+
+/**
+*  A starter class for Bluetooth services.
+*/
+NONSHARABLE_CLASS (CBTServiceStarter) : public CActive,
+                          public MBTServiceObserver,
+                          public MObexUtilsDialogObserver,
+                          public MObexUtilsProgressObserver,
+                          public MBTEngSdpResultReceiver,
+                          public MBTEngSettingsObserver,
+                          public MHbDeviceProgressDialogObserver,
+						  public MHbDeviceDialogObserver 
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CBTServiceStarter* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CBTServiceStarter();
+
+    public: // New functions
+        
+        /**
+        * Starts the given service.
+        * @param aService The service to be started.
+        * @param aList Parameters for the service.
+        * @param aWaiter A pointer to a waiter object.
+        * @return None.
+        */
+        void StartServiceL( TBTServiceType aService, 
+                            CBTServiceParameterList* aList,
+                            CActiveSchedulerWait* aWaiter = NULL );
+
+    private: // Functions from base classes
+
+
+
+        /**
+        * From MBTServiceObserver A controller has completed.
+        * @param aStatus The completion status of the controller.
+        * @return None.
+        */
+        void ControllerComplete( TInt aStatus );
+
+        /**
+        * From MBTServiceObserver A progress note should be shown.
+        * @param aGetter A pointer to a progess status getter object.
+        * @param aTotalSize Max size of the progress bar.
+        * @return None.
+        */
+        void LaunchProgressNoteL( MBTServiceProgressGetter* aGetter, TInt aTotalSize, TInt aFileCount );
+        
+        
+        /**
+        * From MBTServiceObserver Updating progress note when multiple files are sent.
+        * @param aFileSize Size of the file to be send.
+        * @param aFileIndex index of the file to be send.
+        * @param aFileName name of the file to be send.
+        * @return None.
+        */
+        void UpdateProgressNoteL(TInt aFileSize,TInt aFileIndex, const TDesC& aFileName );
+		
+      /**
+        * From MBTServiceObserver Updating progress note info about the progress percentage
+        * @return None.
+        */
+         void UpdateProgressInfoL();
+
+        /**
+        * From MObexUtilsWaitDialogObserver The wait note has been dismissed.
+        * @param aButtonId The button id that was used to dismiss the dialog.
+        * @return None.
+        */
+        void DialogDismissed( TInt aButtonId );
+        
+        /**
+		* From MHbDeviceProgressDialogObserver
+		*
+		*/
+        void ProgressDialogCancelled(const CHbDeviceProgressDialogSymbian *  aDialog);
+        
+	  /**
+		* From MHbDeviceProgressDialogObserver
+		*
+		*/
+        void ProgressDialogClosed(const CHbDeviceProgressDialogSymbian *  aDialog )  ; 
+
+        /**
+        * From MObexUtilsProgressObserver request for number of bytes sent
+        * @Param None.
+        * @return Number of bytes sent.
+        */
+        TInt GetProgressStatus();
+        
+        /**
+        *  From MBTServiceObserver A confirmation query for BIP
+        *  profile  should be shown.
+        *  @return key
+        */ 
+        TInt LaunchConfirmationQuery(TInt aResourceId); 
+        
+        /**
+        *  From MBTServiceObserver a connect request is timedout        
+        *  @return
+        */ 
+        void ConnectTimedOut();
+        
+        
+        /**
+        * Provides notification of the result of a service search that matches 
+        * the requested UUID (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method indicates that the search has completed, and returns 
+        * all the results to the caller at once.
+        *
+        * @since S60 v3.2
+        * @param aResult Array of record handles that match the requested UUID.
+        *                Note: the array will not be available anymore after 
+        *                this method returns.
+        * @param aTotalRecordsCount The total number of records returned.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful, KErrEof if no record matched the requested UUID, 
+        *             KErrCouldNotConnect and KErrCouldDisconnected in case of 
+        *             Bluetooth connection errors; otherwise one of the 
+        *             system-wide error codes.
+        */
+        void ServiceSearchComplete( const RSdpRecHandleArray& aResult, 
+                                    TUint aTotalRecordsCount, TInt aErr );
+
+        /**
+        * Provides notification of the result of an attribute search that matches 
+        * the requested attribute (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method indicates that the search has completed, and returns 
+        * all the results to the caller at once.
+        *
+        * @since S60 v3.2
+        * @param aHandle Record handle of the service record containing the result.
+        * @param aAttr Array containing the attribute that matches the 
+        *              requested attribute.
+        *              Note: the array will not be available anymore after 
+        *              this method returns.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful, KErrEof if the requested attribute was not 
+        *             contained in the specified service record, 
+        *             KErrCouldNotConnect and KErrCouldDisconnected in case of 
+        *             Bluetooth connection errors; otherwise one of the 
+        *             system-wide error codes.
+        */
+        void AttributeSearchComplete( TSdpServRecordHandle aHandle, 
+                                           const RSdpResultArray& aAttr, 
+                                           TInt aErr );
+
+        /**
+        * Provides notification of the result of an combination of a service 
+        * and attribute search (through CBTEngDiscovery::RemoteSdpQuery).
+        * This method is called for each service and attribute combination for 
+        * which a match was found. The last result (which could be empty if no 
+        * match was found) contain error code KErrEof to indicate that the 
+        * search has completed.
+        *
+        * @since S60 v3.2
+        * @param aHandle Record handle of the service record containing the result.
+        * @param aAttr Array containing the attribute that matches the 
+        *              requested attribute.
+        *              Note: the array will not be available anymore after 
+        *              this method returns.
+        * @param aErr Error code of the service search operation; KErrNone if 
+        *             sucessful and more results follow, KErrEof indicates that 
+        *             this is the last result (which could be empty if no match 
+        *             was found), KErrCouldNotConnect and KErrCouldDisconnected 
+        *             in case of Bluetooth connection errors; otherwise one of 
+        *             the system-wide error codes.
+        */
+        void ServiceAttributeSearchComplete( TSdpServRecordHandle aHandle, 
+                                                      const RSdpResultArray& aAttr, 
+                                                      TInt aErr );
+
+        /**
+        * Provides notification of the result of the discovery of nearby 
+        * Bluetooth devices.
+        *
+        * @since S60 v3.2
+        * @param aDevice The data structure encapsulates all information 
+        *                about the selected device. Ownership of the data 
+        *                structure has not been transfered and is still with
+        *                the API client.
+        * @param aErr Error code of the device search operation; KErrNone if 
+        *             sucessful, KErrCancel if the user cancelled the 
+        *             dialog, KErrCancel if CBTEngDiscovery::CancelSearchRemoteDevice
+        *             was called; otherwise one of the system-wide error codes.
+        */
+        void DeviceSearchComplete( CBTDevice* aDevice, TInt aErr );
+    
+        /**
+         * From MBTEngSettingsObserver.
+         * Provides notification of changes in the power state 
+         * of the Bluetooth hardware.
+         *
+         * @since S60 v3.2
+         * @param aState EBTPowerOff if the BT hardware has been turned off, 
+         *               EBTPowerOn if it has been turned off.
+         */
+        void PowerStateChanged( TBTPowerStateValue aState );
+
+        /**
+         * From MBTEngSettingsObserver.
+         * Provides notification of changes in the discoverability 
+         * mode of the Bluetooth hardware.
+         *
+         * @since S60 v3.2
+         * @param aState EBTDiscModeHidden if the BT hardware is in hidden mode, 
+         *               EBTDiscModeGeneral if it is in visible mode.
+         */
+        void VisibilityModeChanged( TBTVisibilityMode aState );
+
+        /**
+         * From CActive.
+         * Called by the active scheduler when the request has been cancelled.
+         * 
+         * @since S60 v3.2
+         */
+        void DoCancel();
+
+        /**
+         * From CActive.
+         * Called by the active scheduler when the request has been completed.
+         * 
+         * @since S60 v3.2
+         */
+        void RunL();
+
+        /**
+         * From CActive.
+         * Called by the active scheduler when an error in RunL has occurred.
+         * 
+         * @since S60 v3.2
+         */
+        TInt RunError( TInt aError );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTServiceStarter();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Check that the parameters are valid for a given service.
+        * @param aService The requested service.
+        * @param aList Parameters for the service.        
+        * @return None.
+        */
+        TBool ValidParameters( TBTServiceType aService, 
+                               const CBTServiceParameterList* aList) const;
+
+        /**
+        * Starts finding a Bluetooth profile suitable for requested service.
+        * @param aService The requested service.
+        * @return None.
+        */
+        void StartProfileSelectL( TBTServiceType aService );
+
+        /**
+        * Start a controller for the given Bluetooth profile.
+        * @param aProfile The profile to be started.
+        * @return None.
+        */
+        void StartProfileL( TBTServiceProfile aProfile );
+
+        /**
+        * Launches a connecting wait note
+        * @param None.
+        * @return None.
+        */
+        void LaunchWaitNoteL();
+        
+        /**
+        * Cancel connecting wait note
+        * @param None.
+        * @return None.
+        */
+        void CancelWaitNote();
+
+        /**
+        * Show a note with given error value
+        * @param aReason Error value
+        * @return None.
+        */
+        void ShowNote( TInt aReason ) const;
+
+        /**
+        * Cancel progress note
+        * @param None.
+        * @return None.
+        */
+        void CancelProgressNote();
+        
+        /**
+        * StopTransfer and show information note
+        * @param aError Error code if error exist.
+        * @return None.
+        */
+        void StopTransfer( TInt aError );
+
+        /**
+         * Check if phone is in offline mode, and ask the user if it is..
+         * @return ETrue if the phone is in offline mode, otherwise EFalse.
+         */
+        TBool CheckOfflineModeL();
+
+        /**
+        * Start BT device discovery.
+        * @return None.
+        */
+        void StartDiscoveryL();
+
+        /**
+         * Turn BT power on.
+         * @param aState The current BT power state.
+         * @return None.
+         */
+        void TurnBTPowerOnL( const TBTPowerStateValue aState );
+        
+        void DataReceived(CHbSymbianVariantMap& aData);
+       
+        void DeviceDialogClosed(TInt aCompletionCode);
+    private:    // Data definitions
+
+        enum TBTServiceStarterState
+            {
+            EBTSStarterIdle,
+            EBTSStarterFindingBPP,
+            EBTSStarterFindingOPP,
+            EBTSStarterFindingBIP,
+            EBTSStarterStoppingService
+            };
+
+    private:    // Data
+
+        CBTDevice*                  iDevice;
+        CBTEngDiscovery*            iBTEngDiscovery;
+        CBTServiceParameterList*    iList;
+ //       CObexUtilsDialog*           iDialog;
+        CBTSController*       iController;
+
+        TBTServiceType              iService;
+        TInt                        iClientChannel;
+        TBTServiceStarterState      iState;
+        TBool                       iServiceStarted;
+        TMsvId                      iMessageServerIndex;
+        
+        MBTServiceProgressGetter*   iProgressGetter;
+        CActiveSchedulerWait*       iWaiter;
+        TBool                       iAllSend;                     
+        TInt						iBytesSendWithBIP;        
+        TBool						iProgressDialogActive;        
+        TBool                       iUserCancel;
+        CBTEngSettings*             iBTEngSettings;
+        TBool                       iWaitingForBTPower;
+        RNotifier                   iNotifier;  // Handle to the generic notifier.
+        TPckgBuf<TBool>             iOffline;
+        TPckgBuf<TBool>             iName;
+        TBool                       iSendToBIPOnlyDevice;
+        TBTActiveNotifier           iActiveNotifier;
+        TBool                       iFeatureManagerInitialized;
+        TBool                       iTriedBIP;
+        TBool                       iTriedOPP;
+        CHbDeviceDialogSymbian *iDeviceDialog;
+        CHbDeviceProgressDialogSymbian *iProgressDialog;
+        TInt                        iFileCount;
+        TInt                        iFileIndex;
+        CBTSProgressTimer *iProgressTimer;
+    };
+
+#endif      // BT_SERVICE_CONTROLLER_H
+            
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceUtils.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2002 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:  Contains BTSU wide definitions.
+*
+*/
+
+
+#ifndef BT_SERVICE_UTILS_H
+#define BT_SERVICE_UTILS_H
+
+// INCLUDES
+#include <e32std.h>
+
+// CONSTANTS
+
+// Name of this component
+//
+_LIT( KBTSUModuleName, "Bluetooth Service Utils" );
+
+const TInt KBTSUArrayGranularity     = 1;
+const TInt KBTSUMaxStringLength      = 255;
+const TInt KBTSUTextBufferMaxSize    = 512;
+const TInt KBTSUDataBufferMaxSize    = 102400;  // 100K 
+const TInt KBTSUDataBufferExpandSize = 4;
+const TInt KBTSUEqualStrings         = 0; // The ok-result of TDesC::Compare
+
+_LIT( KBTSProtocol, "RFCOMM" ); // The Bluetooth transport layer
+
+// Obex header HI values
+//
+const TUint8 KBTSUNameHeader        = 0x01;
+const TUint8 KBTSUImageHandleHeader = 0x30;
+const TUint8 KBTSUTypeHeader        = 0x42;
+const TUint8 KBTSULengthHeader      = 0xC3;
+const TUint8 KBTSUTargetHeader      = 0x46;
+const TUint8 KBTSUAppParamsHeader   = 0x4C;
+const TUint8 KBTSUImgDescriptorHeader = 0x71;
+
+
+// DATA TYPES
+
+enum TBTSUPanicCode 
+    {
+    EBTSUPanicNullPointer = 45000,
+    EBTSUPanicExistingObject,
+    EBTSUPanicObjectActive,
+    EBTSUPanicUnhandledCase,
+    EBTSUPanicInternalError,
+    EBTSUPanicOutOfRange,
+    EBTSUPanicResponseAlreadyPresent,
+    EBTSUPanicNoBufferEvenThoughCountNotZero
+    };
+
+enum TBTServiceStatus
+    {
+    EBTSNoError = 100,
+    EBTSNoFiles,
+    EBTSAbort,
+    EBTSConnectingFailed,
+    EBTSGettingFailed,
+    EBTSPuttingFailed,
+    EBTSNoSuitableProfiles,
+    EBTSUserCancel,
+    EBTSBIPOneNotSend,
+    EBTSBIPSomeSend,
+    EBTSBIPNoneSend
+    };
+    
+ struct  TBTSUImageCap
+ 	{
+ 	TDesC* iEncoding;
+ 	TSize  iMinPixelSize;
+ 	TSize  iMaxPixelSize;
+ 	TInt   iMaxByteSize;	
+ 	};
+
+
+// FUNCTION PROTOTYPES
+
+/**
+* Calls the Symbian OS Panic function specifying this component's name as the
+* panic category and aPanic as the panic code.
+* @param aPanic The panic code.
+* @return None.
+*/
+void BTSUPanic( TBTSUPanicCode aPanic );
+
+
+// CLASS DECLARATION
+
+/**
+*  A cleanup template class for objects that need ResetAndDestroy call.
+*/
+template <class T> class CleanupResetAndDestroy
+    {
+    public:
+        inline static void PushL( T& aRef );
+    private:
+        static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T> inline void CleanupResetAndDestroyPushL( T& aRef );
+
+#include "BTServiceUtils.inl"
+
+#endif      // BT_SERVICE_UTILS_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceUtils.inl	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2002 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:  Inline methods for BTSU.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CleanupResetAndDestroy<T>::PushL
+// -----------------------------------------------------------------------------
+//
+template <class T> inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CleanupResetAndDestroy<T>::ResetAndDestroy
+// -----------------------------------------------------------------------------
+//
+template <class T> void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    ( STATIC_CAST( T*, aPtr) )->ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CleanupResetAndDestroyPushL
+// -----------------------------------------------------------------------------
+//
+template <class T> inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/Bmarm/ObexServiceSendUtilsApiTestU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/Bwins/ObexServiceSendUtilsApiTestU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/EABI/ObexServiceSendUtilsApiTestU.def	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/conf/ui_ObexServiceSendUtilsApiTest.cfg	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,8 @@
+[Test]
+title StartService
+create ObexServiceSendUtilsApiTest test
+test StartService
+delete test
+[Endtest] 
+
+
Binary file btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/data/SmallPic.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          ObexServiceSendUtilsApiTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID     0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID     0x00000000
+
+//TARGETPATH      ?target_path
+DEFFILE         ObexServiceSendUtilsApiTest.def
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE   ../../../../inc
+USERINCLUDE     ../inc
+SOURCEPATH  ../src
+SOURCE          ObexServiceSendUtilsApiTest.cpp
+SOURCE          ObexServiceSendUtilsApiTestBlocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         obexservicesendutils.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest.pkg	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,66 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Symbian Foundation License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;
+; Installation file for STIF
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"\epoc32\release\armv5\urel\ObexServiceSendUtilsApiTest.dll"   -   "!:\Sys\Bin\ObexServiceSendUtilsApiTest.dll"
+;"\epoc32\release\armv5\urel\ObexServiceSendUtilsApiTest.exe"   -   "!:\Sys\Bin\ObexServiceSendUtilsApiTest.exe"
+"..\data\SmallPic.jpg"-"e:\testdata\SmallPic.jpg"
+"..\init\ObexServiceSendUtilsApiTest.ini" - "c:\testframework\testframework.ini"
+"..\conf\ui_ObexServiceSendUtilsApiTest.cfg" - "c:\testframework\ui_ObexServiceSendUtilsApiTest.cfg"
+
+
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/ObexServiceSendUtilsApiTest_nrm.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          ObexServiceSendUtilsApiTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID     0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID     0x00000000
+
+//TARGETPATH      ?target_path
+DEFFILE         ObexServiceSendUtilsApiTest.def
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE   ../../../../inc
+USERINCLUDE     ../inc
+SOURCEPATH  ../src
+SOURCE          ObexServiceSendUtilsApiTest.cpp
+SOURCE          ObexServiceSendUtilsApiTestBlocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         obexservicesendutils.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_TESTEXPORTS
+
+
+PRJ_EXPORTS
+
+
+PRJ_TESTMMPFILES
+ObexServiceSendUtilsApiTest.mmp
+
+PRJ_MMPFILES
+ObexServiceSendUtilsApiTest_nrm.mmp
+
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/group/make_and_sign_sis.bat	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,18 @@
+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 the License "Symbian Foundation License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+makesis -v ObexServiceSendUtilsApiTest.pkg
+signsis.exe ObexServiceSendUtilsApiTest.sis ObexServiceSendUtilsApiTest.sisx rd.cer rd-key.pem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/inc/ObexServiceSendUtilsApiTest.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+#ifndef OBEXSERVICESENDUTILSAPITEST_H
+#define OBEXSERVICESENDUTILSAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+_LIT( KObexServiceSendUtilsApiTestLogPath, "\\logs\\testframework\\Obex\\" ); 
+// Log file
+_LIT( KObexServiceSendUtilsApiTestLogFile, "ObexServiceSendUtilsApiTest.txt" ); 
+_LIT( KObexServiceSendUtilsApiTestLogFileWithTitle, "ObexServiceSendUtilsApiTest_[%S].txt" );
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+class CObexServiceSendUtilsApiTest;
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// CLASS DECLARATION
+
+/**
+*  CObexServiceSendUtilsApiTest test class for STIF Test Framework TestScripter.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS(CObexServiceSendUtilsApiTest) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CObexServiceSendUtilsApiTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CObexServiceSendUtilsApiTest();
+
+    public: // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    protected:  // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    protected:  // Functions from base classes
+
+        /**
+        * From ?base_class ?member_description
+        */
+        //?type ?member_function();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CObexServiceSendUtilsApiTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        /**
+        * Example test method.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt StartServiceL( CStifItemParser& aItem );
+        
+        /**
+         * Method used to log version of test class
+         */
+        void SendTestClassVersion();
+
+        //ADD NEW METHOD DEC HERE
+        //[TestMethods] - Do not remove
+
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    protected:  // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    private:    // Data
+        
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+        // Reserved pointer for future extension
+        //TAny* iReserved;
+
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+        //?friend_class_declaration;
+    private:    // Friend classes
+        //?friend_class_declaration;
+
+    };
+
+#endif      // OBEXSERVICESENDUTILSAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/init/ObexServiceSendUtilsApiTest.ini	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,53 @@
+
+[Engine_Defaults]
+
+TestReportMode= FullReport		# Possible values are: 'Empty', 'Summary', 'Environment',
+                                                               'TestCases' or 'FullReport'
+
+CreateTestReport= YES			# Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT			# Possible values: TXT or HTML
+TestReportOutput= FILE			# Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE	# Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone	# Possible values are:
+						# 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+					  	# 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+					  	# 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+					  	# 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                              # Default timeout value for each test case. In milliseconds
+
+UITestingSupport= Yes
+
+[End_Defaults]
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\ui_ObexServiceSendUtilsApiTest.cfg
+[End_Module]
+ 
+
+
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES		# Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+
+
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/src/ObexServiceSendUtilsApiTest.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "ObexServiceSendUtilsApiTest.h"
+#include <SettingServerClient.h>
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::CObexServiceSendUtilsApiTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CObexServiceSendUtilsApiTest::CObexServiceSendUtilsApiTest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CObexServiceSendUtilsApiTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KObexServiceSendUtilsApiTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KObexServiceSendUtilsApiTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KObexServiceSendUtilsApiTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+    
+    SendTestClassVersion();
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CObexServiceSendUtilsApiTest* CObexServiceSendUtilsApiTest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CObexServiceSendUtilsApiTest* self = new (ELeave) CObexServiceSendUtilsApiTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CObexServiceSendUtilsApiTest::~CObexServiceSendUtilsApiTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+
+    }
+
+//-----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CObexServiceSendUtilsApiTest::SendTestClassVersion()
+	{
+	TVersion moduleVersion;
+	moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+	moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+	moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+	
+	TFileName moduleName;
+	moduleName = _L("ObexServiceSendUtilsApiTest.dll");
+
+	TBool newVersionOfMethod = ETrue;
+	TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+	}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CObexServiceSendUtilsApiTest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/internal/tsrc/ObexServiceSendUtilsApiTest/src/ObexServiceSendUtilsApiTestBlocks.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2002 - 2007 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 "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "ObexServiceSendUtilsApiTest.h"
+#include "BTServiceAPI.h"
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CObexServiceSendUtilsApiTest::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CObexServiceSendUtilsApiTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        ENTRY( "StartService", CObexServiceSendUtilsApiTest::StartServiceL ),
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+TInt CObexServiceSendUtilsApiTest::StartServiceL( CStifItemParser& aItem )
+    {
+
+      CBTServiceAPI* service = CBTServiceAPI::NewL();
+      CleanupStack::PushL(service );
+      STIF_ASSERT_NOT_NULL(service)
+      
+      CBTServiceParameterList* list = CBTServiceParameterList::NewL();
+      iLog->Log(_L("CBTServiceParameterList::NewL"));
+      CleanupStack::PushL(list);
+      STIF_ASSERT_NOT_NULL(list)
+
+      list->AddImageL(_L("e:\\testdata\\SmallPic.jpg"));
+      iLog->Log(_L("list->AddImageL "));
+      CleanupStack::Pop(list);
+      
+      TRAPD( err, service->StartSynchronousServiceL( EBTSendingService, list));
+      iLog->Log(_L("service->StartServiceL result: %d"), err);
+      CleanupStack::PopAndDestroy(1);
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServiceSendUtilsApiTest::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+/*
+TInt CObexServiceSendUtilsApiTest::?member_function(
+   CItemParser& aItem )
+   {
+
+   ?code
+
+   }
+*/
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTConnectionTimer.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2002 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:  Waiter class implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTConnectionTimer.h"
+#include "BTServiceUtils.h"
+#include "BTSUDebug.h"
+
+// CONSTANTS
+
+                                    
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBPPServerWait::CBTSBPPServerWait
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTConnectionTimer::CBTConnectionTimer( MBTConTimeObserver* aObserver ) : 
+    CTimer( EPriorityStandard ), iObserver( aObserver )
+                                  
+    {
+    
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTConnectionTimer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTConnectionTimer::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTConnectionTimer::ConstructL()"));
+
+    CTimer::ConstructL();
+    
+
+    FLOG(_L("[BTSU]\t CBTConnectionTimer::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTConnectionTimer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTConnectionTimer* CBTConnectionTimer::NewL( MBTConTimeObserver* aObserver )
+    {
+    CBTConnectionTimer* self = new( ELeave ) CBTConnectionTimer( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+    
+// Destructor
+CBTConnectionTimer::~CBTConnectionTimer()
+    {
+    Cancel();
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTConnectionTimer::SetTimeOut
+// -----------------------------------------------------------------------------
+//
+void CBTConnectionTimer::SetTimeOut(TTimeIntervalMicroSeconds32 aTimeOutValue)
+    {
+    iTimeOutValue = aTimeOutValue;
+    }
+// -----------------------------------------------------------------------------
+// CBTConnectionTimer::Start
+// -----------------------------------------------------------------------------
+//
+void CBTConnectionTimer::Start()
+    {    
+    After( iTimeOutValue );
+    }
+        
+// -----------------------------------------------------------------------------
+// CBTConnectionTimer::RunL
+// -----------------------------------------------------------------------------
+//
+void CBTConnectionTimer::RunL()
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTConnectionTimer::RunL() status %d"), iStatus.Int() ) );
+    
+    if ( iObserver )
+        {
+        iObserver->ConnectionTimedOut();
+        }
+
+    FLOG(_L("[BTSU]\t CBTConnectionTimer::RunL() completed"));
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBIPController.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,691 @@
+/*
+* Copyright (c) 2002 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:  Image push implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTSBIPController.h"
+#include "BTSUDebug.h"
+#include "BTSUImageConverter.h"
+#include "BTSUXmlParser.h"
+#include <Obexutils.rsg>
+
+
+
+// CONSTANTS
+// image push target header
+_LIT8( KBIPImagePushID, "\xE3\x3D\x95\x45\x83\x74\x4A\xD7\x9E\xC5\xC1\x6B\xE3\x1E\xDE\x8E" );
+
+// type headers
+_LIT8( KBTSBIPCapabilities, "x-bt/img-capabilities\0");
+_LIT8( KBTSBIPImageType,    "x-bt/img-img\0");
+_LIT8( KBTSBIPThmType,      "x-bt/img-thm\0");
+
+// imageBTS descriptor
+_LIT8( KBTSBIPDescriptorStart,     "<image-descriptor version=\"1.0\">\r" );
+_LIT8( KBTSBIPDescriptorEncoding,  "<image encoding=\"" );
+_LIT8( KBTSBIPDescriptorPixel,     "\" pixel=\"" );
+_LIT8( KBTSBIPDescriptorSize,      "\" size=\"" );
+_LIT8( KBTSBIPDescriptorEnd,       "\"/>\r</image-descriptor>" );
+
+// temp file path for capabilities object
+
+//temp file path drive letter
+_LIT(KBTSBIPTempPathDrive,"c:");
+const TInt KBTSUMaxPathLenght=256;
+const TInt KBTSUMaxPrivatePathLenght=20;
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::CBTSBIPController
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSBIPController::CBTSBIPController( MBTServiceObserver* aObserver, 
+                                      CBTServiceParameterList* aList ) :
+                                      iListPtr( aList ),
+                                      iObserverPtr( aObserver )
+									  
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::ConstructL( const TUint aRemotePort, 
+                                    const TBTDevAddr& aRemoteDeviceAddr )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::ConstructL()"));
+    
+    // Add image push target header
+    //
+    CObexHeader* header = CObexHeader::NewL();
+    CleanupStack::PushL( header );
+    header->SetByteSeqL( KBTSUTargetHeader, KBIPImagePushID );
+
+    RArray<CObexHeader*> headerList;
+    CleanupClosePushL( headerList );
+    headerList.Append( header );
+    
+    CreateClientL ( this, aRemoteDeviceAddr, aRemotePort, headerList );    
+
+    CleanupStack::Pop( 2 ); //header, headerlist
+    headerList.Close();
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSBIPController* CBTSBIPController::NewL( MBTServiceObserver* aObserver,
+                                           const TUint aRemotePort,
+                                           const TBTDevAddr& aRemoteDeviceAddr,
+                                           CBTServiceParameterList* aList )
+    {
+    CBTSBIPController* self = 
+        new( ELeave ) CBTSBIPController( aObserver, aList );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRemotePort, aRemoteDeviceAddr );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// Destructor
+CBTSBIPController::~CBTSBIPController()
+    {
+    DeleteTempFile( iThumbnailFileName );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::ConnectCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::ConnectCompleted( TInt aStatus )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::ConnectCompleted()"));
+
+    if ( aStatus == KErrNone )
+        {
+        iFileIndex = 0;
+        // get remote device capabilities
+        //
+        TRAPD( error, GetL() );
+        if ( error != KErrNone )
+            {
+            iObserverPtr->ControllerComplete( EBTSGettingFailed );
+            }
+        }
+    else
+        {
+        //Error on Obex level
+        //
+        iObserverPtr->ControllerComplete( EBTSConnectingFailed );
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::ConnectCompleted() completed"));
+    }
+// -----------------------------------------------------------------------------
+// CBTSBIPController::ClientConnectionClosed
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::ClientConnectionClosed()
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::ClientConnectionClosed()"));
+
+    // Everything ready, stop service
+    //    
+    iObserverPtr->ControllerComplete( EBTSNoError );	
+    FLOG(_L("[BTSU]\t CBTSBIPController::ClientConnectionClosed() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::PutCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::PutCompleted( TInt aStatus, 
+                                      const CObexHeaderSet* aPutResponse )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::PutCompleted()"));
+
+    // Remove temporary thumbnail file
+    //
+    DeleteTempFile( iThumbnailFileName );
+    if ( aStatus == KErrNone )
+        {              
+        iFileIndex++;
+        // Send was ok. Start sending next image
+        //
+        TRAPD( error, SendL() );
+        if ( error )
+            {
+            FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::Send leaved with %d"), error ));
+            iObserverPtr->ControllerComplete( EBTSPuttingFailed);
+            }                
+        }
+    else if ( aStatus == KErrIrObexRespPartialContent )
+        {
+        // Remote device has requested a thumbnail image
+        //
+        TRAPD( error, SendThumbnailL(aPutResponse ) );
+        if ( error )
+            {
+            FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::Send thumbnail leaved with %d"), error ));
+            iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+            }
+        }
+    else
+        {
+        // Some error on Obex level
+        //
+        iObserverPtr->ControllerComplete( EBTSPuttingFailed);
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::PutCompleted() done"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::GetCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::GetCompleted( TInt aStatus, 
+                                      CObexBufObject* aGetResponse )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::GetCompleted()"));	
+
+    if ( aStatus == KErrAbort )
+        {
+        // Connection is cancelled
+        //
+        iObserverPtr->ControllerComplete( EBTSGettingFailed );
+        }
+    
+    else if ( aStatus == KErrNone )
+        {
+        TRAPD( error, HandleGetCompleteIndicationL( aGetResponse ) );
+        if ( error != KErrNone )
+            {
+            DeleteTempFile( iTempFileName );
+            // Error on capability handling
+            //
+            iObserverPtr->ControllerComplete( EBTSGettingFailed );
+            }
+        }
+    else if( aStatus != KErrAbort && aGetResponse->BytesReceived()==0 )
+        {
+        TRAPD( error,iObserverPtr->LaunchProgressNoteL( iClient, iListPtr->ImageListSize(),iListPtr->ImageCount() ) );
+        error=KErrNone;
+        TRAP(error, SendL() );    	 
+        if ( error != KErrNone )
+            {            
+            iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+            }    	      
+        } 	
+    else if ( aStatus != KErrNone && aGetResponse->BytesReceived()>0 )
+        {
+        // Error on Obex level
+        //
+        iObserverPtr->ControllerComplete( EBTSGettingFailed );
+        }
+    
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::GetCompleted() done"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::SendL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::SendL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::SendL()"));
+
+    
+    if ( iListPtr->ImageCount() > 0 && iFileIndex < iListPtr->ImageCount())
+        {        
+        
+        RArray<CObexHeader*> headerList;
+        CleanupClosePushL( headerList );
+
+        // Add Type header
+        //
+        CObexHeader* typeHeader = CObexHeader::NewL();
+        CleanupStack::PushL( typeHeader );
+        typeHeader->SetByteSeqL( KBTSUTypeHeader, KBTSBIPImageType );
+        headerList.Append( typeHeader );
+
+        // Add image descriptor
+        //
+        HBufC8* imagedescriptor = CreateImageDescriptorL( );
+        CleanupStack::PushL( imagedescriptor );
+  
+        CObexHeader* imageDescriptorHeader = CObexHeader::NewL();
+        CleanupStack::PushL( imageDescriptorHeader );
+        imageDescriptorHeader->SetByteSeqL( KBTSUImgDescriptorHeader, imagedescriptor->Des() );
+        headerList.Append( imageDescriptorHeader );
+
+        // Send image
+        //
+        
+        TBTSUImageParam imageparam = iListPtr->ImageAtL( iFileIndex );        
+        RBuf filename;
+        filename.CreateL(256);
+        CleanupClosePushL(filename);
+        imageparam.iFile.Name(filename);
+        
+        iObserverPtr->UpdateProgressNoteL(imageparam.iFileSize,iFileIndex,filename);
+        CleanupStack::PopAndDestroy(&filename);
+        
+        iListPtr->MarkAsSendL(iFileIndex);
+        
+        
+        iClient->PutObjectL( headerList, imageparam.iFile );
+        
+          
+        CleanupStack::Pop(4); // headerList, imageDescriptorHeader, typeHeader, imagedescriptor
+        delete imagedescriptor;
+        headerList.Close();
+        }
+    else
+        {
+        FLOG(_L("[BTSU]\t CBTSBIPController::SendL() all images sent, closing connection"));
+
+        // All images sent, close client connection.
+        //
+        iClient->CloseClientConnection();
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::SendL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::GetL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::GetL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::GetL()"));
+
+    RArray<CObexHeader*> headerList;
+    CleanupClosePushL(headerList);
+    
+    // Add capabilities type header
+    //
+    CObexHeader* typeHeader = CObexHeader::NewL();
+    CleanupStack::PushL( typeHeader );
+    typeHeader->SetByteSeqL( KBTSUTypeHeader, KBTSBIPCapabilities );
+    headerList.Append( typeHeader );
+
+    // Get capabilities object from remote device
+    //
+    iClient->GetObjectL( headerList );
+
+    CleanupStack::Pop(2); // headerList, typeHeader
+    headerList.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::SendThumbnailL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::SendThumbnailL( const CObexHeaderSet *aPutResponse )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::SendThumbnail()"));
+
+    // Create thumbnail for sending
+    // Delete the created thumbnail on PutComplete
+    //
+
+    // Fill header array
+    //
+	
+    RArray<CObexHeader*> headerList;
+    CleanupClosePushL(headerList);
+
+    // Add ImageHandle header
+    //
+    CObexHeader* imageHandleHeader = CObexHeader::NewL();
+    CleanupStack::PushL( imageHandleHeader );
+
+    aPutResponse->First();
+	User::LeaveIfError(aPutResponse->Find(KBTSUImageHandleHeader,
+			 *imageHandleHeader ) );
+	headerList.Append( imageHandleHeader );
+	
+    // Add Type header
+    //
+    CObexHeader* typeHeader = CObexHeader::NewL();
+    CleanupStack::PushL( typeHeader );
+    typeHeader->SetByteSeqL( KBTSUTypeHeader, KBTSBIPThmType );
+    headerList.Append( typeHeader );
+	
+	
+    CreateTempFileL( iThumbnailFileName );
+    CBTSUImageConverter* imageConverter = CBTSUImageConverter::NewL();
+    CleanupStack::PushL( imageConverter );
+    
+    TBTSUImageParam imgparam = iListPtr->ImageAtL( iFileIndex );
+    imageConverter->CreateThumbnailL(imgparam.iFile, iThumbnailFileName );
+    
+    CleanupStack::PopAndDestroy(imageConverter);    
+
+	// Add Name header
+    //
+    TParse parse;
+    User::LeaveIfError( parse.Set( iThumbnailFileName, NULL, NULL ) );
+    CObexHeader* nameHeader = CObexHeader::NewL();
+    CleanupStack::PushL( nameHeader );
+    nameHeader->SetUnicodeL( KBTSUNameHeader, parse.NameAndExt() );
+    headerList.Append( nameHeader );
+
+    // send thumbnail
+    //
+    iClient->PutObjectL( headerList, iThumbnailFileName );
+    
+    // Cleanup
+    //
+    CleanupStack::Pop(4); // headerList, imageHandleHeader, typeHeader, nameHeader
+    headerList.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::CreateTempFileL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::CreateTempFileL( TFileName& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::CreateTempFileL()"));
+
+    RFs fileSession;
+    RFile file;    
+    
+    TBuf<KBTSUMaxPrivatePathLenght> privatepath;     
+    TBuf<KBTSUMaxPathLenght> tempPath;     
+    
+    User::LeaveIfError( fileSession.Connect() );
+    CleanupClosePushL( fileSession );    
+    
+    User::LeaveIfError(fileSession.CreatePrivatePath(EDriveC));
+    User::LeaveIfError(fileSession.PrivatePath(privatepath));
+    tempPath.Append(KBTSBIPTempPathDrive());
+    tempPath.Append(privatepath);    
+    User::LeaveIfError( file.Temp( fileSession, privatepath, 
+                            aFileName, EFileWrite ) );
+    
+    file.Flush();
+    file.Close();
+    CleanupStack::Pop();    // Close fileSession
+    fileSession.Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::GenerateTempFileNameL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::GenerateTempFileNameL( TFileName& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::GenerateTempFileNameL()"));
+
+    RFs fileSession;
+    RFile file;  
+    
+    TBuf<KBTSUMaxPrivatePathLenght> privatepath;     
+    TBuf<KBTSUMaxPathLenght> tempPath;     
+    
+    User::LeaveIfError( fileSession.Connect() );
+    CleanupClosePushL( fileSession );
+    
+    User::LeaveIfError(fileSession.CreatePrivatePath(EDriveC));
+    User::LeaveIfError(fileSession.PrivatePath(privatepath ));
+    tempPath.Append(KBTSBIPTempPathDrive());
+    tempPath.Append(privatepath);
+    User::LeaveIfError(file.Temp( fileSession, tempPath, 
+                            aFileName, EFileWrite ) );                            
+    
+    file.Flush();
+    file.Close();
+    // Delete the file so that only a unique name is created
+    fileSession.Delete( aFileName );
+    CleanupStack::Pop();    // Close fileSession
+    fileSession.Close();
+    }    
+
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::DeleteTempFileL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::DeleteTempFile( TFileName& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::DeleteTempFile()"));
+
+    if ( &aFileName != NULL )
+        {
+        if ( aFileName.Length() > 0 )
+            {
+            RFs fileSession;
+            TInt retVal = fileSession.Connect();
+            if (retVal == KErrNone)
+                {
+                fileSession.Delete( aFileName );
+                }
+            fileSession.Close();
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::DeleteTempFile() complete"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::CreateImageDescriptorL
+// -----------------------------------------------------------------------------
+//
+HBufC8*  CBTSBIPController::CreateImageDescriptorL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::CreateImageDescriptorL()"));
+
+    //   Example image descriptor of an small jpeg picture
+    //   with size 160*120 pixels and a size of 5000 bytes.
+    //
+    //  <image-descriptor version=\"1.0\">
+    //  <image encoding=\"JPEG\" pixel=\"160*120\" size=\"5000\"/>
+    //  </image-descriptor>
+    TBTSUImageParam param = iListPtr->ImageAtL( iFileIndex );
+    
+    // Add start of image description
+    //
+    TBuf8<KBTSUMaxStringLength> string( KBTSBIPDescriptorStart );
+
+    // Add image encoding
+    //
+    string.Append( KBTSBIPDescriptorEncoding );
+    string.Append( *param.iDisplayName );
+
+    // Add image pixel size
+    //
+    string.Append( KBTSBIPDescriptorPixel );
+    string.AppendNum( param.iPixelSize.iWidth );
+    string.Append( '*' );
+    string.AppendNum( param.iPixelSize.iHeight );
+
+    // Add image size
+    //
+    string.Append( KBTSBIPDescriptorSize );
+    string.AppendNum( param.iFileSize );
+
+    // Add end of image description
+    //
+    string.Append( KBTSBIPDescriptorEnd );
+
+    FLOG(_L("[BTSU]\t CBTSBIPController::CreateImageDescriptorL() completed"));
+    
+    return string.AllocL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::HandleGetCompleteIndicationL
+// -----------------------------------------------------------------------------
+//
+void CBTSBIPController::HandleGetCompleteIndicationL( CObexBufObject* aGetResponse )
+    {
+    FLOG(_L("[BTSU]\t CBTSBIPController::HandleGetCompleteIndicationL()"));
+
+    TBool found;
+    TBool allSupported;
+    TInt picindex,capindex;
+    TInt confirm=0;
+    CBTSUXmlParser* xmlParser = CBTSUXmlParser::NewL();
+    CleanupStack::PushL( xmlParser );
+    GenerateTempFileNameL( iTempFileName );
+    aGetResponse->WriteToFile( iTempFileName );
+    aGetResponse->Reset();
+    
+    // Parse capability object and create a list of supported image encodings
+    //
+    RArray<TBTSUImageCap>* remoteCapabilityList = 
+        xmlParser->GetImgCapabilityListL( iTempFileName );
+    
+    // Delete the temp file since we dont need it anymore
+    //
+    DeleteTempFile( iTempFileName );
+
+    // Go through all the images on our sending list and check 
+    // if remote device is capable of receiving those.
+    // 
+    allSupported= ETrue;   
+    for (picindex=0; picindex< iListPtr->ImageCount(); picindex++ )
+    	{
+    	found=EFalse;
+    	for (capindex=0; capindex < remoteCapabilityList->Count(); capindex++)
+    		{
+    		//Find first is encoding suported			
+    		if((iListPtr->ImageAtL( picindex ).iDisplayName->Compare(*(*remoteCapabilityList)[capindex].iEncoding))==0)		
+    			{
+    			found=ETrue;    			
+    			//Check pixel size
+    			if((*remoteCapabilityList)[capindex].iMinPixelSize.iHeight>=0)
+    				{
+    				if(((*remoteCapabilityList)[capindex].iMaxPixelSize.iWidth < iListPtr->ImageAtL( picindex ).iPixelSize.iWidth)  ||
+    				   ((*remoteCapabilityList)[capindex].iMaxPixelSize.iHeight < iListPtr->ImageAtL( picindex ).iPixelSize.iHeight)|| 
+    				   ((*remoteCapabilityList)[capindex].iMinPixelSize.iHeight > iListPtr->ImageAtL( picindex ).iPixelSize.iHeight)||
+    				   ((*remoteCapabilityList)[capindex].iMinPixelSize.iWidth > iListPtr->ImageAtL( picindex ).iPixelSize.iWidth)
+    				   )
+    					{
+    					found=EFalse;
+    					}
+    				}
+    		
+    			//Check byte size
+    			if((*remoteCapabilityList)[capindex].iMaxByteSize>=0)
+    				{    				
+    				if((*remoteCapabilityList)[capindex].iMaxByteSize<iListPtr->ImageAtL( picindex ).iFileSize)
+    					{
+    					found=EFalse;
+    					}
+    				}    	
+    			// If file is supported, stop the loop.
+    			//
+    			if ( found )
+    			    break;
+    			}
+     		}
+    	allSupported = found & allSupported;
+    	}
+    	
+	for (TInt index=0; index < remoteCapabilityList->Count(); index++)
+		{
+		if((*remoteCapabilityList)[index].iEncoding)
+			{
+			delete ((*remoteCapabilityList)[index].iEncoding);
+			}
+
+		}
+		
+	remoteCapabilityList->Close();
+	delete remoteCapabilityList;
+    CleanupStack::PopAndDestroy( xmlParser ); 
+    
+    if(!allSupported  && iListPtr->ImageCount() > 1)
+    	{      	
+    	
+    	confirm=iObserverPtr->LaunchConfirmationQuery(R_BT_NOT_SEND_ALL_QUERY_MIXED);    	
+    		
+    	if(confirm==EAknSoftkeyYes)
+    		{
+    		// Everything went ok. Start sending images
+    		//
+    		iObserverPtr->LaunchProgressNoteL( iClient, iListPtr->ImageListSize(),iListPtr->ImageCount() );
+    
+		    // Start sending images
+    		//
+   			SendL();
+    		}
+    	
+    		
+    	}
+    else if ( !allSupported  &&  iListPtr->ImageCount() == 1)
+        {
+        // We allow user to choose wheather to send the image file which is not supported on target device
+        // Original codeline: iObserverPtr->ControllerComplete( EBTSBIPOneNotSend ); 
+        confirm=iObserverPtr->LaunchConfirmationQuery(R_BT_NOT_SEND_ALL_QUERY_SINGLE);       
+                    
+        if(confirm==EAknSoftkeyYes)
+            {
+            // Everything went ok. Start sending the images
+            //
+            iObserverPtr->LaunchProgressNoteL( iClient, iListPtr->ImageListSize(),iListPtr->ImageCount() );
+            
+            // Start sending images
+            //
+            SendL();
+            }
+        } 	
+    else if( allSupported )  	
+        {
+    	iObserverPtr->LaunchProgressNoteL( iClient, iListPtr->ImageListSize() + iListPtr->ObjectListSizeL(),iListPtr->ImageCount() + iListPtr->ObjectCount());
+    
+	    // Start sending images
+    	//   	
+   		SendL();   		
+    	}
+    	
+    
+    FLOG(_L("[BTSU]\t CBTSBIPController::HandleGetCompleteIndicationL() #3"));
+    }
+    
+
+//-----------------------------------------------------------------------------
+// void CBTSBIPController::ConnectTimedOut()
+// -----------------------------------------------------------------------------
+//        
+void CBTSBIPController::ConnectTimedOut()    
+    {
+    iObserverPtr->ConnectTimedOut();    
+    }
+
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPController.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,422 @@
+/*
+* Copyright (c) 2002 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:  Basic printing profile implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSBPPController.h"
+#include "BTSUDebug.h"
+
+#include <obexheaders.h>
+#include <Obexutils.rsg>
+#include <obexutilsuilayer.h>
+
+// CONSTANTS
+_LIT8( KBTSDirectPrintingUUID, "\x00\x00\x11\x18\x00\x00\x10\x00\x80\x00\x00\x80\x5F\x9B\x34\xFB" );
+_LIT8( KBTSXHTMLPrintType,     "application/vnd.pwg-xhtml-print+xml\0" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::CBTSBPPController
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPController::CBTSBPPController( MBTServiceObserver* aObserver,
+                                      const CBTServiceParameterList* aList ) : 
+                                      iServerState( EBTSBPPSrvIdle ), 
+                                      iClientDone( EFalse ), 
+                                      iObserverPtr( aObserver ), 
+                                      iListPtr( aList )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ConstructL( const TBTDevAddr& aRemoteDevice,
+                                    const TUint aRemotePort,
+                                    CBTEngDiscovery* aBTConnectionPtr )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::ConstructL()"));
+
+    // Create an array of obex headers
+    //
+    RArray<CObexHeader*> headers;
+    CleanupClosePushL( headers );
+
+    CObexHeader* targetHdr = CObexHeader::NewL();
+    CleanupStack::PushL( targetHdr );
+    targetHdr->SetByteSeqL( KBTSUTargetHeader, KBTSDirectPrintingUUID );
+    headers.Append( targetHdr );
+
+    // Create obex client
+    //    
+    CreateClientL ( this, aRemoteDevice, aRemotePort, headers );        
+
+    CleanupStack::Pop( 2 ); // targetHdr, headers
+    headers.Close();
+
+    // Start the object server if there were referenced objects
+    //
+    if ( iListPtr->HasAnyReferencedObjects() )
+        {
+        iServer = CBTSBPPObjectServer::NewL( this,
+                                             aBTConnectionPtr,
+                                             aRemoteDevice );
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPController* CBTSBPPController::NewL( MBTServiceObserver* aObserver,                                                                              
+                                            const TUint aRemotePort,
+                                            const TBTDevAddr& aRemoteDevice,
+                                            const CBTServiceParameterList* aList,
+                                            CBTEngDiscovery* aBTConnectionPtr )
+    {
+    CBTSBPPController* self = new( ELeave ) CBTSBPPController( aObserver, aList );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRemoteDevice, aRemotePort, aBTConnectionPtr );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+    
+// Destructor
+CBTSBPPController::~CBTSBPPController()
+    {
+    if ( iServer )
+        {
+        delete iServer;
+        iServer = NULL;
+        }
+    if ( iServerWait )
+        {            
+        delete iServerWait;
+        iServerWait = NULL;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ConnectCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ConnectCompleted( TInt aStatus )
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::ConnectCompleted() %d"), aStatus ));
+
+    if ( aStatus )
+        {
+        // The connect operation failed.
+        //
+        iObserverPtr->ControllerComplete( EBTSConnectingFailed );
+        }
+    else
+        {
+        TRAPD( error, SelectAndSendL() );
+
+        if ( error )
+            {
+            FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error ));
+            iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ConnectCompleted() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::PutCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::PutCompleted( TInt aStatus, const CObexHeaderSet* /*aPutResponse*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::PutCompleted()"));
+
+	if ( aStatus )
+        {
+        // The put operation failed.
+        //
+        iObserverPtr->ControllerComplete( aStatus );
+        }
+    else
+        {
+        iClientDone = ETrue;
+
+        if ( iServer == NULL                  || // Server was not needed at all or
+             !iServer->HasReferencedObjects() || // no referenced objects in current file or
+             iServerState == EBTSBPPSrvDone )    // server is done.
+            {
+            // Object sent and server done, check if there are 
+            // more files to send.
+            //
+            TRAPD( error, SelectAndSendL() );
+
+            if ( error )
+                {
+                FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error ));
+                iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+                }
+            }
+        else if ( iServerState == EBTSBPPSrvIdle )
+            {
+            __ASSERT_DEBUG( iServerWait == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+
+            // Object sent but server isn't serving yet. 
+            // Wait for a connection attempt.
+            //
+
+            TRAPD(error, iServerWait = CBTSBPPServerWait::NewL( this ));
+			
+			if ( error )
+                {
+                FTRACE(FPrint(_L("[BTSU]\t CBTSBPPServerWait::NewL() leaved with %d"), error ));
+                iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+                }
+
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::PutCompleted() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::GetCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::GetCompleted( TInt /*aStatus*/, CObexBufObject* /*aGetResponse*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::GetCompleted() ERROR: unsolicited callback"));
+    __ASSERT_DEBUG( EFalse, BTSUPanic( EBTSUPanicInternalError ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ClientConnectionClosed
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ClientConnectionClosed()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::ClientConnectionClosed()"));
+
+    // Everything is now ready.
+    //
+    iObserverPtr->ControllerComplete( EBTSNoError );
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ClientConnectionClosed() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ServerError
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ServerError( TInt aError )
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::ServerError() %d"), aError ) );
+
+    // Mark server as ready and if client is ready, complete the controller.
+    //
+    iServerState = EBTSBPPSrvDone;
+
+    if ( iClientDone )
+        {
+        iObserverPtr->ControllerComplete( aError );
+        }
+    else
+        {
+        // Server ready, no need to wait anymore
+        //
+        if ( iServerWait )
+            {            
+            delete iServerWait;
+            iServerWait = NULL;
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ServerError() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ServerConnectionEstablished
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ServerConnectionEstablished()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionEstablished()"));
+
+    iServerState = EBTSBPPSrvServing;
+
+    if ( iServerWait )
+        {
+        // The wait for server connection can now be stopped.
+        //
+        delete iServerWait;
+        iServerWait = NULL;
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionEstablished() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::ServerConnectionClosed
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::ServerConnectionClosed()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionClosed()"));
+
+    iServerState = EBTSBPPSrvDone;
+
+    if ( iClientDone )
+        {
+        // The client was waiting for server, but now another object 
+        // can be sent.
+        //
+        TRAPD( error, SelectAndSendL() );
+
+        if ( error )
+            {
+            iObserverPtr->ControllerComplete( error );
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionClosed() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::WaitComplete
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::WaitComplete()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::WaitComplete()"));
+
+    // For some reason the printer didn't establish server connection although
+    // there were referenced objects
+    //
+    if ( iServerWait )
+        {   
+        delete iServerWait;
+        iServerWait = NULL;
+        }
+
+    // The client was waiting for server, but now another object 
+    // can be sent.
+    //
+    TRAPD( error, SelectAndSendL() );
+
+    if ( error )
+        {
+        FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error ));
+        iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::WaitComplete() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPController::SelectAndSendL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPController::SelectAndSendL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL()"));
+
+    TBTSUXhtmlParam param;
+    param.iFileName = NULL;
+    param.iRefObjectList = NULL;
+   
+    if ( iListPtr->XhtmlCount() > 0 && iSendIndex < iListPtr->XhtmlCount() )
+        {
+        // Get next xhtml parameter
+        //
+        param = iListPtr->XhtmlAt( iSendIndex );
+        iSendIndex++;
+        }
+
+    if ( param.iFileName != NULL )
+        {
+        FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() fileName='%S'"), param.iFileName ));
+
+        if ( iServer )
+            {
+            // Pass the list of referenced objects in the file to object server.
+            //
+            iServer->SetReferencedObjectList( param.iRefObjectList );
+            }
+
+        // Create an array of obex headers
+        //
+        RArray<CObexHeader*> headers;
+        CleanupClosePushL( headers );
+
+        CObexHeader* typeHdr = CObexHeader::NewL();
+        CleanupStack::PushL( typeHdr );
+        typeHdr->SetByteSeqL( KBTSUTypeHeader, KBTSXHTMLPrintType );
+        headers.Append( typeHdr );
+
+        // Send object.
+        //
+        iClient->PutObjectL( headers, *param.iFileName );
+        
+        CleanupStack::Pop( 2 ); // typeHdr, headers
+        headers.Close();
+
+        // A new object is being sent. Reset states.
+        //
+        iClientDone = EFalse;
+        iServerState = EBTSBPPSrvIdle;
+        }
+    else
+        {
+        FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() all objects sent, closing connection"));
+
+        // All objects sent, close client connection.
+        //
+        iClient->CloseClientConnection();
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() completed"));
+    }
+
+//-----------------------------------------------------------------------------
+// void CBTSBPPController::ResetFileHandleL
+// -----------------------------------------------------------------------------
+//    
+void CBTSBPPController::ResetFileHandleL()
+    {    
+    }
+
+//-----------------------------------------------------------------------------
+// void CBTSBPPController::ConnectTimedOut()
+// -----------------------------------------------------------------------------
+//        
+void CBTSBPPController::ConnectTimedOut()    
+    {
+    iObserverPtr->ConnectTimedOut();
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPObjectRequest.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,481 @@
+/*
+* Copyright (c) 2002 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:  GetReferencedObjects -operation implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSBPPObjectRequest.h"
+#include "BTSUDataConverter.h"
+#include "BTSUImageConverter.h"
+#include "BTSUDebug.h"
+
+#include <f32file.h>    // RFile
+#include <s32mem.h>     // RBufWriteStream
+#include <s32file.h>    // RFileReadStream
+
+// CONSTANTS
+const TInt KBTSBPPFileSizeNotSet         = 0;
+const TInt KBTSBPPFileSizeRequested      = 1;
+const TInt KBTSBPPFileSizeUnknown        = -1;
+const TInt KBTSBPPRestOfTheFileRequested = -1;
+
+// The field lengths of Application Parameters -header in bytes
+//
+const TInt KBTSBPPFieldTag       = 1;
+const TInt KBTSBPPFieldLength    = 1;
+const TInt KBTSBPPValue          = 4;
+const TInt KBTSBPPAppParamLength = KBTSBPPFieldTag + KBTSBPPFieldLength + KBTSBPPValue;
+
+_LIT8(KBTSBPPRefObjectOper, "x-obex/referencedobject\0");
+
+static const TUint8 KBTSBPPFileSizeTag = 0x04;
+static const TUint8 KBTSBPPFileSizeLength = 0x04;
+
+// MODULE DATA STRUCTURES
+enum KBTSBPPAppParamTags
+    {
+    KBTSBPPTagOffset = 1,
+    KBTSBPPTagCount,
+    KBTSBPPTagJobId, // used only in JobBased-printing
+    KBTSBPPTagFileSize
+    };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CBTSBPPObjectRequest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPObjectRequest::CBTSBPPObjectRequest( CObexBaseObject* aGetOperation,
+    const CDesCArray* aRefObjectList ) : iRequest( aGetOperation ), 
+                                         iObjectList( aRefObjectList )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::ConstructL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ConstructL()"));
+
+    User::LeaveIfError( iFileSession.Connect() );
+
+    // Check the validity of the operation and it's paramters.
+    //
+    CheckGetRequestL();
+
+    // Execute any tasks needed and create the requested object.
+    //
+    ExecuteGetRequestL();
+
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPObjectRequest* CBTSBPPObjectRequest::NewL( CObexBaseObject* aGetOperation,
+                                              const CDesCArray* aRefObjectList )
+    {
+    CBTSBPPObjectRequest* self = new( ELeave ) CBTSBPPObjectRequest( aGetOperation,
+                                                                 aRefObjectList );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+    
+// Destructor
+CBTSBPPObjectRequest::~CBTSBPPObjectRequest()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::~CBTSBPPObjectRequest()"));
+    iFileSession.Close();
+
+    delete iResponse;
+    delete iResponseBuffer;
+
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::~CBTSBPPObjectRequest() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::GetResponse
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CBTSBPPObjectRequest::GetResponse()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::GetResponse()"));
+    return iResponse;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CheckGetRequestL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::CheckGetRequestL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckGetRequestL()"));
+
+    CheckTypeHeaderL();
+    CheckNameHeaderL();
+    CheckAppParamsHeaderL();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CheckTypeHeaderL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::CheckTypeHeaderL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL()"));
+
+    __ASSERT_DEBUG( iRequest, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    const TDesC8& typeHeader = iRequest->Type();
+
+    if ( typeHeader.Length() == 0 )
+        {
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL() ERROR, no type header"));
+        User::Leave( KErrNotFound );
+        }
+    else if ( typeHeader.Length() > KBTSUMaxStringLength )
+        {
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL() ERROR, type header too long"));
+        User::Leave( KErrTooBig );
+        }
+    else
+        {
+        FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL() type header '%S'"), &typeHeader ));
+        // The only supported operation is GetReferencedObjects
+        //
+        if ( typeHeader != KBTSBPPRefObjectOper() )
+            {
+            FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL() ERROR, unsupported operation"));
+            User::Leave( KErrNotSupported );
+            }
+        }
+
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckTypeHeaderL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CheckNameHeaderL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::CheckNameHeaderL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckNameHeaderL()"));
+
+    __ASSERT_DEBUG( iRequest, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    const TDesC& nameHeader = iRequest->Name();
+
+    if ( nameHeader.Length() == 0 )
+        {
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckNameHeaderL() ERROR, no name header"));
+        User::Leave( KErrNotFound );
+        }
+    else
+        {
+        FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckNameHeaderL() filename '%S'"), &nameHeader ));
+
+        // Check are we allowed to send this file
+        //
+        TInt dummy;
+        if ( iObjectList->Find( nameHeader, dummy ) != KBTSUEqualStrings )
+            {
+            FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckNameHeaderL() ERROR, the asked object is not referenced in the document"));
+            User::Leave( KErrPermissionDenied );
+            }
+
+        iRequestParams.iName = &nameHeader;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CheckAppParamsHeaderL
+//
+// This method expects a Tag-Length-Value format. The method is as defensive 
+// as possible, for example unknown or illegal values are discarded.
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::CheckAppParamsHeaderL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL()"));
+
+    __ASSERT_DEBUG( iRequest, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    TPtrC8 header( iRequest->AppParam() );    
+
+    if ( header.Length() == 0 )
+        {
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() ERROR, no AppParam header"));
+        User::Leave( KErrNotFound );
+        }
+    else if ( header.Length() < KBTSBPPAppParamLength * 2)
+        {
+        // There has to be at least offset and count -parameters.
+        //
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() ERROR, incomplete AppParam header"));
+        User::Leave( KErrArgument );
+        }
+    else
+        {
+        // Parse the header
+        //
+        while( header.Length() >= KBTSBPPAppParamLength )
+            {
+            // Extract tag number and remove it from the header
+            //
+            TInt tagNumber = TBTSUDataConverter::ConvertByteL(
+                header.Left( KBTSBPPFieldTag ) );
+            header.Set( header.Mid( KBTSBPPFieldTag ) );
+
+            // Extract value length and remove it from the header
+            //
+            TInt valueLength = TBTSUDataConverter::ConvertByteL( 
+                header.Left( KBTSBPPFieldLength ) );
+            header.Set( header.Mid( KBTSBPPFieldLength ) );
+
+            if ( valueLength != KBTSBPPValue )
+                {
+                FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() WARNING, illegal length %d"), valueLength ));
+                valueLength = KBTSBPPValue;
+                // This is an interesting choice of what to do, I would argue that for future compatibility you'll probably want to accept the length
+                // provided as it might be for a new tag that is not yet published.  (Checking of the size for known tags is handled by the conversion
+                // functions anyway).
+                // So, in summary I wouldn't change valueLength from what it is in the payload.  But I've left it in for now in case it was added for
+                // interoperability reasons with some existing device.
+                }
+
+            // Extract value...
+            //
+            switch ( tagNumber )
+                {
+                case KBTSBPPTagOffset:
+                    {
+                    iRequestParams.iOffset = 
+                        TBTSUDataConverter::ConvertDataUnsignedL( 
+                        header.Left( valueLength ) );
+
+                    FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() offset '%d'"), iRequestParams.iOffset ));
+                    break;
+                    }
+                case KBTSBPPTagCount:
+                    {
+                    iRequestParams.iCount = 
+                        TBTSUDataConverter::ConvertDataSignedL( 
+                        header.Left( valueLength ) );
+
+                    FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() count '%d'"), iRequestParams.iCount ));
+                    break;
+                    }
+                case KBTSBPPTagFileSize:
+                    {
+                    // The value is not interesting, we just need to know whether 
+                    // the parameter was received (and thus requested)
+                    //
+                    iRequestParams.iOffset = KBTSBPPFileSizeRequested;
+                    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ParseHeadersL() fileSize parameter received"));
+                    break;
+                    }
+
+                case KBTSBPPTagJobId:
+                default:
+                    {
+                    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() WARNING, illegal tag"));
+                    break;
+                    }
+                }
+
+            // ...and remove it from the header
+            //
+            header.Set( header.Mid( valueLength ) );
+            }
+        }
+
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CheckAppParamsHeaderL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::ExecuteGetRequestL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::ExecuteGetRequestL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ExecuteGetRequestL()"));
+
+    // If iCount is 0, an empty body will be sent
+    //
+    if ( iRequestParams.iCount != 0 )
+        {
+        ResolveGetRequestL();
+        ReadFileToBufferL();      
+        }
+
+    CreateResponseObjectL();
+
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ExecuteGetRequestL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::ResolveGetRequestL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::ResolveGetRequestL()
+    {
+    FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::ResolveGetRequestL()"));
+
+    // Get the file size
+    //
+    RFile file;
+    TInt size = 0;
+    User::LeaveIfError( file.Open( iFileSession, *iRequestParams.iName, 
+                                   EFileShareReadersOnly | EFileStream ) );
+
+    TInt error = file.Size( size );
+    
+    if ( error )
+        {
+        FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::ResolveGetRequestL() error %d in getting the size"), error ) );
+        size = KBTSBPPFileSizeUnknown;
+        }
+
+    file.Close();
+
+    // Store the file size if it was requested
+    //
+    if ( iRequestParams.iFileSize == KBTSBPPFileSizeRequested )
+        {
+        iRequestParams.iFileSize = size;
+        }
+
+    // Resolve the actual amount of data that needs to be read.
+    // 
+    TInt dataLeft = size - iRequestParams.iOffset;
+
+    if ( iRequestParams.iCount == KBTSBPPRestOfTheFileRequested )
+        {
+        if ( size == KBTSBPPFileSizeUnknown )
+            {
+            // The size of the file is unknown, so read as much 
+            // as would fit into the buffer
+            //
+            iRequestParams.iCount = KBTSUDataBufferMaxSize;
+            }        
+        else
+            {
+            // The rest of the file is requested, so correct the count
+            //
+            iRequestParams.iCount = dataLeft;
+            }
+        }
+    else if ( iRequestParams.iCount > dataLeft )
+        {
+        // There is less data left that was requested, so correct the count
+        //
+        iRequestParams.iCount = dataLeft;
+        }
+
+    if ( iRequestParams.iCount > KBTSUDataBufferMaxSize )
+        {
+        // The requested count is too big
+        //
+        FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::ResolveGetRequestL() iCount too big %d"), iRequestParams.iCount ) );
+        User::Leave( KErrTooBig );
+        }
+
+    FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::ResolveGetRequestL() completed, requested %d bytes"), iRequestParams.iCount ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::ReadFileToBufferL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::ReadFileToBufferL()
+    {
+    __ASSERT_DEBUG( !iResponseBuffer, BTSUPanic( EBTSUPanicExistingObject ) );
+
+    // Create a buffer for the object and reserve space according to the request
+    //
+    iResponseBuffer = CBufFlat::NewL( KBTSUDataBufferExpandSize );
+    iResponseBuffer->SetReserveL( iRequestParams.iCount );
+    iResponseBuffer->ResizeL( iRequestParams.iCount );
+
+    // Open the file
+    //
+    RFile file;
+    User::LeaveIfError( file.Open( iFileSession, *iRequestParams.iName, 
+                                   EFileShareReadersOnly | EFileStream ) );
+    CleanupClosePushL( file );
+
+    // Create a stream for reading from the file
+    //
+    RFileReadStream readStream( file, iRequestParams.iOffset );
+
+    // Create a stream for writing into the buffer
+    //
+    RBufWriteStream writeStream( *iResponseBuffer );
+
+    // Read the data from file to the buffer
+    //
+    readStream.ReadL( writeStream, iRequestParams.iCount );
+
+    FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::ReadFileToBufferL() space reserved '%d'"), iRequestParams.iCount ));
+    FTRACE(FPrint(_L("[BTSBPP]\t CBTSBPPObjectRequest::ReadFileToBufferL() data read '%d'"), iResponseBuffer->Size() ));
+
+    CleanupStack::PopAndDestroy(&file);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectRequest::CreateResponseObjectL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectRequest::CreateResponseObjectL()
+    {
+    __ASSERT_DEBUG( iResponseBuffer || (iRequestParams.iCount == 0), BTSUPanic( EBTSUPanicNoBufferEvenThoughCountNotZero ) );
+    __ASSERT_DEBUG( !iResponse, BTSUPanic( EBTSUPanicResponseAlreadyPresent ) );
+    
+    // Create the OBEX response object using the buffer already created (or no buffer if appropriate)
+    //
+    iResponse = CObexBufObject::NewL( iResponseBuffer );
+    
+    // Generate FileSize parameter if requested
+    //
+    if ( iRequestParams.iFileSize != KBTSBPPFileSizeNotSet )
+        {
+        FLOG(_L("[BTSBPP]\t CBTSBPPObjectRequest::CreateResponseObjectL() generate file size param"));
+        TBuf8<KBTSBPPAppParamLength> params;
+        params.SetMax();
+        TUint8* ptr = const_cast<TUint8*>(params.Ptr());
+        *ptr++ = KBTSBPPFileSizeTag;
+        *ptr++ = KBTSBPPFileSizeLength;
+        BigEndian::Put32(ptr, *reinterpret_cast<TUint32*>(&iRequestParams.iFileSize)); // reinterpret cast to retain signed nature...
+        iResponse->SetAppParamL( params );
+        }
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPObjectServer.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2002 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:  Server part of basic printing profile
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSBPPObjectServer.h"
+#include "BTSBPPObjectRequest.h"
+#include "BTSUDebug.h"
+
+// CONSTANTS
+const TInt KBTSBPPObjectChannelStart = 15; // Start looking for free RFCOMM channel
+const TInt KBTSBPPObjectChannelStop  = 30; // Last free RFCOMM channel
+
+_LIT8( KBTSBPPReferencedObjectsUUID, "\x00\x00\x11\x20\x00\x00\x10\x00\x80\x00\x00\x80\x5F\x9B\x34\xFB" );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::CBTSBPPObjectServer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPObjectServer::CBTSBPPObjectServer( 
+    MBTSBPPObjectServerObserver* aObserver, CBTEngDiscovery* aBTEngDiscoveryPtr,
+    const TBTDevAddr& aExpectedClient ) : iExpectedClientPtr( &aExpectedClient ),
+                                          iBTEngDiscoveryPtr( aBTEngDiscoveryPtr ),                                          
+                                          iObserverPtr( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ConstructL()"));
+
+    __ASSERT_DEBUG( iObserverPtr != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+    __ASSERT_DEBUG( iBTEngDiscoveryPtr != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+    __ASSERT_DEBUG( iExpectedClientPtr != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    TObexBluetoothProtocolInfo info;
+    info.iTransport = KBTSProtocol;
+
+    iObjectChannel = KBTSBPPObjectChannelStart;
+        for ( ; iObjectChannel < KBTSBPPObjectChannelStop; iObjectChannel++ )
+            {
+        // Register security settings
+        //
+        TBTServiceSecurity sec;
+        sec.SetAuthentication( EFalse );
+        sec.SetAuthorisation( EFalse );
+        sec.SetEncryption( EFalse );
+
+        info.iAddr.SetSecurity( sec );
+        info.iAddr.SetPort( iObjectChannel );
+        
+        // Try to start Obex Server on selected channel
+        //
+        TRAPD( error, iServer = CObexServer::NewL ( info ) );
+            
+        if ( !error )
+            {
+            error = iServer->Start( this );
+            
+            if ( !error )
+                {
+                // Initialize server
+                //
+                iServer->SetCallBack( *this );
+                User::LeaveIfError ( iServer->SetLocalWho( KBTSBPPReferencedObjectsUUID ) );                
+
+                // Register SDP settings
+                //
+                User::LeaveIfError ( iBTEngDiscoveryPtr->RegisterSdpRecord( 
+                    TUUID(KBTSdpBasicPrinting), iObjectChannel, iSDPHandle ));
+
+                FTRACE(FPrint(_L("[BTSU]\t CBTSBPPObjectServer::ConstructL() services running on channel %d"), iObjectChannel ));
+                break;
+                }
+            else
+                {
+                // Failed to start Obex server. Delete server and try again
+                //
+                delete iServer;
+                iServer = NULL;
+                }
+            }
+        }
+
+    if ( !iServer )
+        {
+        FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ConstructL() ERROR, server did not start."));
+        User::Leave( KErrGeneral );
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPObjectServer* CBTSBPPObjectServer::NewL( 
+    MBTSBPPObjectServerObserver* aObserver, CBTEngDiscovery* aBTEngDiscoveryPtr,
+    const TBTDevAddr& aExpectedClient )
+    {
+    CBTSBPPObjectServer* self = new( ELeave ) 
+        CBTSBPPObjectServer( aObserver, aBTEngDiscoveryPtr, aExpectedClient );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+    
+// Destructor
+CBTSBPPObjectServer::~CBTSBPPObjectServer()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::~CBTSBPPObjectServer()"));
+
+    if ( iServer )
+        {
+        iServer->Stop();
+        delete iServer;
+        iServer = NULL;
+        }
+
+    delete iObjectRequest;
+    //delete iPasskeyRequest;
+
+    if ( iBTEngDiscoveryPtr )
+        {        
+        iBTEngDiscoveryPtr->DeleteSdpRecord( iSDPHandle );        
+        }
+
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::~CBTSBPPObjectServer() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::SetReferencedObjectList
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::SetReferencedObjectList( const CDesCArray* aRefObjectList )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::SetReferencedObjectList()"));
+
+    __ASSERT_DEBUG( aRefObjectList != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    iObjectListPtr = aRefObjectList;
+
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::SetReferencedObjectList() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::HasReferencedObjects
+// -----------------------------------------------------------------------------
+//
+TBool CBTSBPPObjectServer::HasReferencedObjects()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::HasReferencedObjects()"));
+    __ASSERT_DEBUG( iObjectListPtr != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    return iObjectListPtr->MdcaCount() > 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::GetUserPasswordL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::GetUserPasswordL( const TDesC& /*aRealm*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::GetUserPasswordL() NOT NEEDED"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::ErrorIndication
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::ErrorIndication( TInt aError )
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPObjectServer::ErrorIndication() error %d"), aError ));
+
+    iObserverPtr->ServerError( aError );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::TransportUpIndication
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::TransportUpIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::TransportUpIndication()"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::TransportDownIndication
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::TransportDownIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::TransportDownIndication()"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::ObexConnectIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::ObexConnectIndication( 
+        const TObexConnectInfo& /*aRemoteInfo*/, const TDesC8& /*aInfo*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ObexConnectIndication()"));
+
+    TInt error = KErrAccessDenied;
+
+    // Check that remote device is the expected one.
+    //
+    TBTSockAddr remoteAddr;
+    iServer->RemoteAddr( remoteAddr );
+    if ( remoteAddr.BTAddr() == *iExpectedClientPtr )
+        {
+        error = KErrNone;
+        iObserverPtr->ServerConnectionEstablished();
+        }
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPObjectServer::ObexConnectIndication() completed with %d"), error ));
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::ObexDisconnectIndication
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::ObexDisconnectIndication( const TDesC8& /*aInfo*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ObexDisconnectIndication()"));
+
+    iObserverPtr->ServerConnectionClosed();
+
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::ObexDisconnectIndication() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::PutRequestIndication
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CBTSBPPObjectServer::PutRequestIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::PutRequestIndication()"));
+
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::PutPacketIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::PutPacketIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::PutPacketIndication()"));
+
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::PutCompleteIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::PutCompleteIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::PutCompleteIndication()"));
+
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::GetRequestIndication
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CBTSBPPObjectServer::GetRequestIndication(
+        CObexBaseObject* aRequiredObject )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::GetRequestIndication()"));
+    __ASSERT_DEBUG( iObjectRequest == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+
+    TInt error = KErrNone;
+    CObexBufObject* object = NULL;
+
+    TRAP( error, iObjectRequest = CBTSBPPObjectRequest::NewL( aRequiredObject, iObjectListPtr ) );
+
+    if ( !error )
+        {
+        object = iObjectRequest->GetResponse();
+        }
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPObjectServer::GetRequestIndication() completed with %d"), error ) );
+
+    return object;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::GetPacketIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::GetPacketIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::GetPacketIndication()"));
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::GetCompleteIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::GetCompleteIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::GetCompleteIndication()"));
+
+    delete iObjectRequest;
+    iObjectRequest = NULL;
+
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::GetCompleteIndication() completed"));
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::SetPathIndication
+// -----------------------------------------------------------------------------
+//
+TInt CBTSBPPObjectServer::SetPathIndication( const CObex::TSetPathInfo& /*aPathInfo*/, 
+                                             const TDesC8& /*aInfo*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::SetPathIndication()"));
+
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPObjectServer::AbortIndication
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPObjectServer::AbortIndication()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPObjectServer::AbortIndication()"));
+
+    iObserverPtr->ServerError( KErrCancel );
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPServerWait.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2002 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:  Waiter class implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTSBPPServerWait.h"
+#include "BTServiceUtils.h"
+#include "BTSUDebug.h"
+
+// CONSTANTS
+const TInt KBTSBPPWaitTime = 120000000; // 2 minutes
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBPPServerWait::CBTSBPPServerWait
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPServerWait::CBTSBPPServerWait( MBTSBPPServerWaitObserver* aObserver ) : 
+    CTimer( EPriorityStandard ), iObserver( aObserver )
+                                  
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPServerWait::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPServerWait::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTSBPPServerWait::ConstructL()"));
+
+    CTimer::ConstructL();
+    After( TTimeIntervalMicroSeconds32( KBTSBPPWaitTime ) );
+
+    FLOG(_L("[BTSU]\t CBTSBPPServerWait::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPServerWait::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSBPPServerWait* CBTSBPPServerWait::NewL( MBTSBPPServerWaitObserver* aObserver )
+    {
+    CBTSBPPServerWait* self = new( ELeave ) CBTSBPPServerWait( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+    
+// Destructor
+CBTSBPPServerWait::~CBTSBPPServerWait()
+    {
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSBPPServerWait::RunL
+// -----------------------------------------------------------------------------
+//
+void CBTSBPPServerWait::RunL()
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTSBPPServerWait::RunL() status %d"), iStatus.Int() ) );
+    __ASSERT_DEBUG( iObserver != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    iObserver->WaitComplete();
+
+    FLOG(_L("[BTSU]\t CBTSBPPServerWait::RunL() completed"));
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSController.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2007-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:  ?Description
+*
+*/
+
+
+
+
+#include "BTSBIPController.h"
+#include "BTServiceClient.h"
+#include "BTSUDebug.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CBTSController::CBTSController()
+    {    
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CBTSController::~CBTSController()
+    {    
+    FLOG(_L("[BTSU]\t CBTSController::Destructor()"));
+    delete iClient;
+    }
+
+// ---------------------------------------------------------------------------
+// CBTSController::Abort
+// ---------------------------------------------------------------------------
+//
+void CBTSController::Abort()
+    {
+    FLOG(_L("[BTSU]\t CBTSController::Abort"));        
+    if ( iClient )
+        {
+        iClient->Abort();
+        }
+    FLOG(_L("[BTSU]\t CBTSController::Abort"));            
+    }
+
+// ---------------------------------------------------------------------------
+// CBTSController::Abort
+// ---------------------------------------------------------------------------
+//
+void CBTSController::CreateClientL(MBTServiceClientObserver* aObserver,
+                                        const TBTDevAddr& aRemoteDevice,
+                                        const TUint aRemotePort,
+                                        RArray<CObexHeader*> aHeaderList )                                        
+    {
+    FLOG(_L("[BTSU]\t CBTSController::CreateClient"));        
+    iClient = CBTServiceClient::NewL( aObserver, aRemoteDevice, aRemotePort, aHeaderList );
+    FLOG(_L("[BTSU]\t CBTSController::Abort"));            
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSOPPController.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2002 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:  Object push controller implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTSOPPController.h"
+#include "BTSUDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::CBTSOPPController
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSOPPController::CBTSOPPController( MBTServiceObserver* aObserver,
+                                     CBTServiceParameterList* aList ) : 
+                                     iListPtr( aList ), 
+                                     iObserverPtr( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::ConstructL( const TUint aRemotePort, const TBTDevAddr& aRemoteDeviceAddr )
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::ConstructL()"));
+    
+    RArray<CObexHeader*> headerList;
+    CleanupClosePushL( headerList );
+    CreateClientL ( this, aRemoteDeviceAddr, aRemotePort, headerList );
+    CleanupStack::Pop();   
+    headerList.Close();
+   
+    FLOG(_L("[BTSS]\t CBTSOPPController::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSOPPController* CBTSOPPController::NewL( MBTServiceObserver* aObserver,
+                                           const TUint aRemotePort,
+                                           const TBTDevAddr& aRemoteDeviceAddr,
+                                           CBTServiceParameterList* aList )
+    {
+    CBTSOPPController* self = new( ELeave ) CBTSOPPController( aObserver, aList );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRemotePort, aRemoteDeviceAddr );
+    CleanupStack::Pop();
+    return self;
+    }
+
+// Destructor
+CBTSOPPController::~CBTSOPPController()
+    {
+    FLOG(_L("[BTSU]\t CBTSOPPController::Destructor()"));    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::ConnectCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::ConnectCompleted( TInt aStatus )
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::ConnectCompleted()"));
+    
+    if ( aStatus == KErrNone )
+        {
+        TRAPD( error, HandleConnectCompleteIndicationL() );
+        if ( error != KErrNone )
+            {
+            // Sending initialisation has failed
+            //
+            iObserverPtr->ControllerComplete( EBTSConnectingFailed );
+            }
+        }
+    else
+        {
+        //Error on Obex level
+        //
+        iObserverPtr->ControllerComplete( EBTSConnectingFailed );
+        }
+
+    FLOG(_L("[BTSS]\t CBTSOPPController::ConnectCompleted() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::ClientConnectionClosed
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::ClientConnectionClosed()
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::ClientConnectionClosed()"));
+
+    // Everything ready, stop service
+    //
+    iObserverPtr->ControllerComplete( EBTSNoError );
+
+    FLOG(_L("[BTSS]\t CBTSOPPController::ClientConnectionClosed() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::PutCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::PutCompleted( TInt aStatus, const CObexHeaderSet* aPutResponse )
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::PutCompleted()"));
+	aPutResponse=aPutResponse;
+
+  
+    if ( aStatus == KErrNone )
+        {       
+        iFileIndex++;
+        Send();        
+        }
+    else
+        {
+        iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+        }
+    
+    FLOG(_L("[BTSS]\t CBTSOPPController::PutCompleted() done"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::GetCompleted
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::GetCompleted( TInt /*aStatus*/, CObexBufObject* /*aGetResponse*/ )
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::GetCompleted() Not used with OPP"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::Send
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::Send()
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::Send()"));
+    
+    TInt error(KErrNone);
+
+    if ( iListPtr->ObjectCount() > 0 && iFileIndex < iListPtr->ObjectCount() )
+        {    
+        RArray<CObexHeader*> headerList; // the array does not need to be closed    
+
+        TRAP( error, {
+                UpdateProgressNoteL();
+                iClient->PutObjectL( headerList, iListPtr->ObjectAtL( iFileIndex ));  });
+
+        if ( error )
+            {
+            FTRACE(FPrint(_L("[BTSU]\t CBTSOPPController::Send() putting leaved with %d"), error ));
+            iObserverPtr->ControllerComplete( EBTSPuttingFailed );
+            }
+        }
+    else
+        {        
+        FLOG(_L("[BTSU]\t CBTSOPPController::Send() all objects sent, closing connection"));
+
+        // All objects sent, close client connection.
+        //
+        iClient->CloseClientConnection();
+        }
+
+    FLOG(_L("[BTSS]\t CBTSOPPController::Send() Done"));
+    }
+
+//-----------------------------------------------------------------------------
+// void CBTSOPPController::ConnectTimedOut()
+// -----------------------------------------------------------------------------
+//        
+void CBTSOPPController::ConnectTimedOut()    
+    {
+    iObserverPtr->ConnectTimedOut();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSOPPController::HandleConnectCompleteIndicationL
+// -----------------------------------------------------------------------------
+//
+void CBTSOPPController::HandleConnectCompleteIndicationL()
+    {
+    FLOG(_L("[BTSS]\t CBTSOPPController::HandleConnectCompleteIndicationL()"));
+    TBTSUImageParam imgparam;
+    if ( iListPtr->ImageCount() > 0 )
+        {
+        for( TInt index = 0; index < iListPtr->ImageCount(); index++ )
+            {
+            // Copy files from Image list to Object list
+            // from now on we use only object list.
+            imgparam = iListPtr->ImageAtL( index );
+            if(!imgparam.iSend)
+                {
+                iListPtr->AddObjectL( imgparam.iFile);
+                }            
+            }
+        }
+    iObserverPtr->LaunchProgressNoteL( iClient, iListPtr->ObjectListSizeL(),iListPtr->ObjectCount() );
+    iFileIndex = 0;
+    UpdateProgressNoteL();    
+    Send();
+    }
+
+
+void CBTSOPPController::UpdateProgressNoteL()
+    {
+    TInt size;
+    RBuf filename;
+    iListPtr->ObjectAtL( iFileIndex ).Size(size);
+    filename.CreateL(255);
+    iListPtr->ObjectAtL( iFileIndex ).Name(filename);
+    iObserverPtr->UpdateProgressNoteL(size,iFileIndex,filename);
+    filename.Close();
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSProgresstimer.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTSProgresstimer.h"
+#include "BTServiceStarter.h"
+#include "BTSUDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSProgressTimer::CBTSProgressTimer( MBTServiceObserver* aProgressObserverPtr)
+                               : CTimer( EPriorityLow ), 
+                                       iProgressObserverPtr( aProgressObserverPtr )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::ConstructL
+// Symbian OS default constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSProgressTimer::ConstructL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::ConstructL()"));
+
+    CTimer::ConstructL();
+
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::NewL
+// -----------------------------------------------------------------------------
+ CBTSProgressTimer* CBTSProgressTimer::NewL( MBTServiceObserver* aProgressObserverPtr)
+    {
+    CBTSProgressTimer* self = 
+        new( ELeave ) CBTSProgressTimer( aProgressObserverPtr );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSProgressTimer::~CBTSProgressTimer()
+    {
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::Tickle
+// -----------------------------------------------------------------------------
+//
+ void CBTSProgressTimer::Tickle()
+    {
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::Tickle()"));
+
+    Cancel();
+    After( iTimeout );
+
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::Tickle() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::RunL
+// -----------------------------------------------------------------------------
+//
+void CBTSProgressTimer::RunL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::RunL()"));
+    if (iProgressObserverPtr)
+        {
+        iProgressObserverPtr->UpdateProgressInfoL();
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::RunL() completed"));
+    }
+
+TInt CBTSProgressTimer::RunError( TInt aError )
+    {
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::RunError()"));
+    (void) aError;
+    FLOG(_L("[OBEXUTILS]\t CBTSProgressTimer::RunError() - completed"));
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::SetTimeout
+// -----------------------------------------------------------------------------
+//
+ void CBTSProgressTimer::SetTimeout( TTimeIntervalMicroSeconds32 aTimeout )
+    {
+    iTimeout = aTimeout;
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,377 @@
+/*
+* Copyright (c) 2002 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:  Capability resolver implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSUCapabilityResolver.h"
+#include "BTSUDebug.h"
+#include <utf.h>
+
+
+// CONSTANTS
+
+_LIT8( KBTSUImageTag, "image-formats" );
+_LIT8( KBTSUAttributeEncoding, "encoding" );
+_LIT8( KBTSUAttributePixel, "pixel" );
+_LIT8( KBTSUAttributeMaxSize,"maxsize");
+_LIT(minus,"-");
+_LIT(star,"*");
+
+
+
+
+#define  INVALIDVALUE   -1
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(CDesCArrayFlat* aCapabilityList)
+    {
+    CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList );
+    CleanupStack::PushL( self );
+    self->ConstructL(  );
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSBIPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(RArray<TBTSUImageCap>* aCapabilityList)
+    {
+    CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList );
+    CleanupStack::PushL( self );
+    self->ConstructL(  );
+    CleanupStack::Pop(self);
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::CBTSUCapabilityResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver::CBTSUCapabilityResolver( CDesCArrayFlat* aCapabilityList )
+	{	
+	aCapabilityList=aCapabilityList;
+	}
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::CBTSUCapabilityResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//	
+CBTSUCapabilityResolver::CBTSUCapabilityResolver( 
+    RArray<TBTSUImageCap>* aCapabilityList ) : iCapabilityList( aCapabilityList )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSBIPController::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::ConstructL ()
+    {
+    }   
+  
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver::~CBTSUCapabilityResolver()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::StartDocument
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnStartDocumentL(const Xml::RDocumentParameters& /*aDocParam*/, TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnStartDocumentL()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error OnStartDocument"));            
+        }    
+    iCompleted=EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::EndDocument
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnEndDocumentL(TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnEndDocumentL()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error EndDocument"));            
+        }            
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::StartElement
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, 
+								 TInt /*aErrorCode*/)  
+    {    
+ 
+    TBool status = EFalse;
+    TBTSUImageCap param;
+    TLex lex;
+    TPtrC sizemaxwidth;
+    TPtrC sizemaxheight;
+    TPtrC sizeminwidth;
+    TPtrC sizeminheight;
+    TPtrC sizemin;
+    TPtrC sizemax;	
+    TInt index;
+    HBufC* enc;	 
+    param.iMaxByteSize=0;                
+
+    TBuf<KBTSUMaxStringLength> conversionBuf;
+    
+    if( aElement.LocalName().DesC() != KBTSUImageTag )
+        {        
+        return;
+        }
+    
+  
+    if(aAttributes.Count()>0)
+        {		
+	
+        param.iEncoding=NULL; 
+        param.iMaxByteSize=-1;
+        param.iMinPixelSize.iHeight=INVALIDVALUE;
+        param.iMinPixelSize.iWidth=INVALIDVALUE;		 
+        param.iMaxPixelSize.iWidth=INVALIDVALUE;
+        param.iMaxPixelSize.iHeight=INVALIDVALUE;
+		 
+    	//Check and add to attribute list if there is encoding    	    	    	
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )
+            {
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeEncoding )
+                {                              
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));                                                    
+                
+                if (conversionBuf.Length()>0)
+                    {	                                        		
+                    enc=conversionBuf.Alloc();
+                    TPtr rwdata(enc->Des());     
+                    rwdata.Copy(conversionBuf);                 
+                    param.iEncoding=enc;         	                    
+                    if (param.iEncoding!=NULL)
+                    	{                    	
+                    	status=ETrue;
+                    	}         		
+                    }
+                }
+            }          			
+       	conversionBuf = KNullDesC;
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )        
+            {                
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributePixel )
+                {                    ;
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));
+                }
+            }            
+            
+		if(conversionBuf.Length()>1)
+			{				
+			index=conversionBuf.Find(minus);	
+			if(index!=KErrNotFound) //max size is given
+				{					
+				sizemin.Set(conversionBuf.Left(index));					
+				sizemax.Set(conversionBuf.Right(conversionBuf.Length()-index-1));
+				//solve min size
+				index=sizemin.Find(star); 	
+				if(index!=KErrNotFound)
+					{
+					sizeminwidth.Set(sizemin.Left(index));
+					sizeminheight.Set(sizemin.Right(sizemin.Length()-index-1));
+													
+					lex.Assign(sizeminwidth);
+					lex.Val(param.iMinPixelSize.iHeight);
+						
+					lex.Assign(sizeminheight);
+					lex.Val(param.iMinPixelSize.iWidth);						
+					}
+				//solve max size	
+				index=sizemax.Find(star);	
+				if(index!=KErrNotFound)
+					{
+					sizemaxwidth.Set(sizemax.Left(index));
+					sizemaxheight.Set(sizemax.Right(sizemax.Length()-index-1));
+						
+					lex.Assign(sizemaxwidth);
+					lex.Val(param.iMaxPixelSize.iWidth);
+						
+					lex.Assign(sizemaxheight);
+					lex.Val(param.iMaxPixelSize.iHeight);
+					status=ETrue;
+					}						
+				}
+			else	//if max size not given
+				{						
+				index=conversionBuf.Find(star);	
+				if(index!=KErrNotFound) 
+					{
+					//solve min size
+					TPtrC sizeminwidth=conversionBuf.Left( index );						
+					TPtrC sizeminheight=conversionBuf.Right( conversionBuf.Length() - index-1);		
+					
+					lex.Assign(sizeminwidth);
+					lex.Val(param.iMinPixelSize.iWidth);
+					
+					lex.Assign(sizeminheight);
+					lex.Val(param.iMinPixelSize.iHeight);
+					//set max size
+					param.iMaxPixelSize.iWidth=param.iMinPixelSize.iWidth;
+					param.iMaxPixelSize.iHeight=param.iMinPixelSize.iHeight;
+                    status=ETrue;							
+					}						
+				}				
+		    }        	
+
+
+        	//Check and add to attribute list if there is maxsize
+            TPtrC maxsizevalue;
+            conversionBuf = KNullDesC;
+            for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )        
+                {                
+                if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeMaxSize )
+                    {                                            
+                    User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));                                    
+                    }
+                }         
+            
+            
+            if (conversionBuf.Length()>0)
+            	{			
+    			lex.Assign(conversionBuf);
+    			lex.Val(param.iMaxByteSize);			
+            	}           
+            	
+            if(status)
+            	{
+            	iCapabilityList->Append(param); //add to list
+            	}   
+
+        }     
+   	 
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnEndElementL
+// -----------------------------------------------------------------------------
+//    
+void CBTSUCapabilityResolver::OnEndElementL(const Xml::RTagInfo& /*aElement*/, TInt aErrorCode)
+  {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()"));    
+    if(aErrorCode==KErrNone)
+        {        
+        iCompleted=ETrue;       
+        }
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()"));    
+        
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnContentL
+// -----------------------------------------------------------------------------
+//     
+void CBTSUCapabilityResolver::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {   
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnStartPrefixMappingL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, 
+								   TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnEndPrefixMappingL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnSkippedEntityL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnSkippedEntityL(const RString& /*aName*/, TInt /*aErrorCode*/)
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnProcessingInstructionL
+// -----------------------------------------------------------------------------
+//     
+void CBTSUCapabilityResolver::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, 
+										  TInt /*aErrorCode*/)
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnError
+// -----------------------------------------------------------------------------
+//    
+void CBTSUCapabilityResolver::OnError(TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::GetExtendedInterface
+// -----------------------------------------------------------------------------
+// 
+TAny* CBTSUCapabilityResolver::GetExtendedInterface(const TInt32 /*aUid*/)
+    {
+        return NULL;
+    }    
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::IsCompleted
+// -----------------------------------------------------------------------------
+    
+TBool CBTSUCapabilityResolver::IsCompleted()
+    {
+    return iCompleted;
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUDataConverter.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2002 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:  Data converter implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTSUDataConverter.h"
+#include <es_sock.h> // for BigEndian functions
+#include "BTSUDebug.h"
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TBTSUDataConverter::ConvertByteL
+// -----------------------------------------------------------------------------
+//
+TUint8 TBTSUDataConverter::ConvertByteL( const TPtrC8& aData )
+    {
+    if ( aData.Length() != sizeof(TUint8) )
+        {
+        User::Leave( KErrArgument );
+        }
+    return *aData.Ptr();
+    }
+
+// -----------------------------------------------------------------------------
+// TBTSUDataConverter::ConvertDataSignedL
+// -----------------------------------------------------------------------------
+//
+TInt32 TBTSUDataConverter::ConvertDataSignedL( const TPtrC8& aData )
+    {
+    if ( aData.Length() != sizeof(TInt32) )
+        {
+        User::Leave( KErrArgument );
+        }
+    TUint32 rawVal = BigEndian::Get32(aData.Ptr());
+    return *reinterpret_cast<TInt32*>(&rawVal); // reinterpret cast to extract signed nature "unscathed"
+    }
+
+// -----------------------------------------------------------------------------
+// TBTSUDataConverter::ConvertDataUnsignedL
+// -----------------------------------------------------------------------------
+//
+TUint32 TBTSUDataConverter::ConvertDataUnsignedL( const TPtrC8& aData )
+    {
+    if ( aData.Size() != sizeof(TUint32) )
+        {
+        User::Leave( KErrArgument );
+        }
+    return BigEndian::Get32(aData.Ptr());
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUImageConverter.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2002 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:  Tools for image conversion.
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSUImageConverter.h"
+#include "BTSUDebug.h"
+
+#include <imageconversion.h>
+#include <bitmaptransforms.h>
+
+//CONSTANTS
+_LIT8( KBTSUImageTypeJpeg, "image/jpeg" );
+const TInt KBTSUJpegQualityFactor = 90;
+const TInt KBTSUImageThumbWidth   = 160;  
+const TInt KBTSUImageThumbHeight  = 120;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::CBTSUImageConverter
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUImageConverter::CBTSUImageConverter(): CActive( EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSUImageConverter::~CBTSUImageConverter()
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::~CBTSUImageConverter()"));
+
+    Cancel();
+    Reset();
+    iFileSession.Close();
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::~CBTSUImageConverter() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUImageConverter* CBTSUImageConverter::NewL()
+    {
+    CBTSUImageConverter* self = new (ELeave) CBTSUImageConverter;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::ConstructL
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::ConstructL()"));
+ 
+    User::LeaveIfError( iFileSession.Connect() );
+    iFileSession.ShareProtected();
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::GetImageSizeL
+// -----------------------------------------------------------------------------
+//
+TSize CBTSUImageConverter::GetImageSizeL( RFile& aImageFile )
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::GetImageSizeL()"));
+   
+    CImageDecoder* decoder = CImageDecoder::FileNewL(aImageFile,ContentAccess::EPeek );
+    TSize size = decoder->FrameInfo().iOverallSizeInPixels;
+    delete decoder;
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTSUImageConverter::GetImageSizeL() completed w=%d h=%d"), size.iWidth, size.iHeight ));
+
+    return size;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::CreateThumbnailL
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::CreateThumbnailL( RFile& aSourceFile, 
+                                            const TDesC& aDestFile )
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::CreateThumbnailL()"));
+    
+
+    Reset();
+    DecodeImageL( aSourceFile );
+    ScaleImageL();
+    EncodeImageL( aDestFile, ETrue );
+    Reset();
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::CreateThumbnailL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::GetDisplayNameL
+// -----------------------------------------------------------------------------
+//
+HBufC* CBTSUImageConverter::GetDisplayNameL( const TDesC8& aMimeType )
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::GetDisplayNameL()"));
+
+    if ( &aMimeType == NULL || 
+         aMimeType.Length() == 0 || 
+         aMimeType.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    HBufC* name = NULL;
+
+    // Get file types from decoder
+    //
+    RFileExtensionMIMETypeArray fileTypes;
+    CleanupResetAndDestroyPushL( fileTypes );
+    CImageDecoder::GetFileTypesL( fileTypes );
+    
+    // Find the display name for the mime type
+    //
+    for( TInt index = 0; index < fileTypes.Count(); index++ )
+        {
+        if ( fileTypes[index]->MIMEType() == aMimeType )
+            {
+            name = fileTypes[index]->DisplayName().AllocL();
+            break;
+            }
+        }
+
+    CleanupStack::PopAndDestroy(); // fileTypes 
+
+    if ( name == NULL )
+        {
+        // No display name found, so the image type is not supported.
+        //
+        User::Leave( KErrNotSupported );
+        }
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::GetDisplayNameL() completed"));
+
+    return name;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::DoCancel()
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::DoCancel()"));
+
+    if ( iDecoder )
+        {
+        iDecoder->Cancel();
+        }
+    if ( iScaler )
+        {
+        iScaler->Cancel();
+        }
+    if ( iEncoder )
+        {
+        iEncoder->Cancel();
+        }
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::DoCancel() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::RunL
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::RunL()
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTSUImageConverter::RunL() %d"), iStatus.Int() ));
+
+    iWait.AsyncStop();
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::RunL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::DecodeImageL
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::DecodeImageL( RFile& aSourceFile )
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::DecodeImageL( )"));
+
+    __ASSERT_DEBUG( iDecoder == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+    __ASSERT_DEBUG( iFrameBitmap == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+
+    // Create decoder
+    //    
+    iDecoder = CImageDecoder::FileNewL(aSourceFile, ContentAccess::EPeek );
+
+    // Create a bitmap
+    //
+    iFrameBitmap = new ( ELeave ) CFbsBitmap;
+    User::LeaveIfError( iFrameBitmap->Create( 
+        iDecoder->FrameInfo().iOverallSizeInPixels,
+        iDecoder->FrameInfo().iFrameDisplayMode ) );
+    
+    // Start decoding
+    //
+    iDecoder->Convert( &iStatus, *iFrameBitmap );
+    SetActive();
+
+    iWait.Start(); // Wait here until decoding is completed
+    User::LeaveIfError( iStatus.Int() );
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::DecodeImageL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::EncodeImageL
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::EncodeImageL( const TDesC& aDestFile, 
+                                        const TBool& aThumbnail )
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::EncodeImageL()"));
+
+    __ASSERT_DEBUG( iDecoder != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+    __ASSERT_DEBUG( iEncoder == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+    __ASSERT_DEBUG( iFrameImageData == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+
+    // Create encoder
+    //
+    iEncoder = CImageEncoder::FileNewL( iFileSession, aDestFile, KBTSUImageTypeJpeg() );
+
+    // Create frame image data
+    //
+    iFrameImageData = CFrameImageData::NewL();
+    TJpegImageData* jpegFormat = new ( ELeave ) TJpegImageData;
+    CleanupStack::PushL( jpegFormat );
+
+    jpegFormat->iSampleScheme = TJpegImageData::EColor422;
+    jpegFormat->iQualityFactor = KBTSUJpegQualityFactor;
+    User::LeaveIfError( iFrameImageData->AppendImageData( jpegFormat ) );
+    CleanupStack::Pop( jpegFormat );
+
+    // Start encoding
+    //
+    if ( aThumbnail )
+        {
+        __ASSERT_DEBUG( iScaledBitmap != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+        iEncoder->Convert( &iStatus, *iScaledBitmap, iFrameImageData );
+        }
+    else
+        {
+        __ASSERT_DEBUG( iFrameBitmap != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+        iEncoder->Convert( &iStatus, *iFrameBitmap, iFrameImageData );
+        }
+    
+    SetActive();
+    iWait.Start(); // Wait here until encoding is completed
+    User::LeaveIfError( iStatus.Int() );
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::EncodeImageL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::ScaleImageL
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::ScaleImageL()
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::ScaleImageL( )"));
+
+    __ASSERT_DEBUG( iDecoder != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+    __ASSERT_DEBUG( iFrameBitmap != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+    __ASSERT_DEBUG( iScaler == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+    __ASSERT_DEBUG( iScaledBitmap == NULL, BTSUPanic( EBTSUPanicExistingObject ) );
+
+    // Create scaler
+    //
+    iScaler = CBitmapScaler::NewL();
+
+    // Create a bitmap
+    //
+    iScaledBitmap = new ( ELeave ) CFbsBitmap;
+    TSize size;
+    size.iWidth = KBTSUImageThumbWidth;
+    size.iHeight = KBTSUImageThumbHeight;
+    User::LeaveIfError( iScaledBitmap->Create( size,
+        iDecoder->FrameInfo().iFrameDisplayMode ) );
+    
+    // Start scaling
+    //
+    iScaler->Scale( &iStatus, *iFrameBitmap, *iScaledBitmap, EFalse );
+    SetActive();
+
+    iWait.Start(); // Wait here until scaling is completed
+    User::LeaveIfError( iStatus.Int() );
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::ScaleImageL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUImageConverter::Reset
+// -----------------------------------------------------------------------------
+//
+void CBTSUImageConverter::Reset()
+    {
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::Reset()"));
+
+    delete iDecoder; iDecoder = NULL;
+    delete iEncoder; iEncoder = NULL;
+    delete iScaler; iScaler = NULL;
+    
+    delete iFrameImageData; iFrameImageData = NULL;
+    delete iFrameBitmap; iFrameBitmap = NULL;
+    delete iScaledBitmap; iScaledBitmap = NULL;
+
+    FLOG(_L("[BTSU]\t CBTSUImageConverter::Reset() completed"));
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUPassKeyRequest.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2002 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:  CBTSUPasskeyRequest implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTSUPassKeyRequest.h"
+#include "BTSUDebug.h"
+#include "BTServiceUtils.h"
+
+#include <utf.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSUPasskeyRequest::CBTSUPasskeyRequest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSUPasskeyRequest::CBTSUPasskeyRequest() : CActive(EPriorityNormal)
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// Destructor
+CBTSUPasskeyRequest::~CBTSUPasskeyRequest()
+    {
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::~CBTSUPasskeyRequest"));
+
+    Cancel(); // Make sure we're cancelled
+    iNotif.Close();
+
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest:~CBTSUPasskeyRequest completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUPasskeyRequest::DoCancel()
+// -----------------------------------------------------------------------------
+//
+void CBTSUPasskeyRequest::DoCancel()
+    {
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::DoCancel"));
+
+    iNotif.CancelNotifier( KBTObexPasskeyQueryNotifierUid );
+    iNotif.Close();
+
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::DoCancel completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUPasskeyRequest::RunL()
+// -----------------------------------------------------------------------------
+//
+void CBTSUPasskeyRequest::RunL()
+    {
+    FTRACE(FPrint(_L( "[BTSU]\t CBTSUPasskeyRequest::RunL status %d"), iStatus.Int() ));
+
+    if ( iStatus.Int() == KErrNone )
+        {
+        TBuf<KBTObexPasskeyMaxLength> tempResultBuffer;
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( tempResultBuffer, iObexPasskey() );
+        iObexClient->UserPasswordL( tempResultBuffer );
+
+        FTRACE(FPrint(_L("[BTSU]\t CBTSUPasskeyRequest::RunL user entered '%S'"), &tempResultBuffer ));
+        }
+    else
+        {
+        iObexClient->Error( KErrCancel );
+        }
+
+    iNotif.CancelNotifier( KBTObexPasskeyQueryNotifierUid );
+    iNotif.Close();
+
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::RunL completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUPasskeyRequest::RunError()
+// -----------------------------------------------------------------------------
+//
+TInt CBTSUPasskeyRequest::RunError()
+    {
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::RunError"));
+
+    iNotif.CancelNotifier( KBTObexPasskeyQueryNotifierUid );
+    iNotif.Close();
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUPasskeyRequest::StartPassKeyRequestL()
+// -----------------------------------------------------------------------------
+//
+void CBTSUPasskeyRequest::StartPassKeyRequestL( CObexClient* aObexClient )
+    {
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::StartPassKeyRequestL"));
+    __ASSERT_DEBUG( aObexClient != NULL, BTSUPanic( EBTSUPanicNullPointer ) );
+
+    User::LeaveIfError( iNotif.Connect() );
+    TPtrC8 dummy( KNullDesC8 );
+
+    // Starts notifier and gets the passkey for Obex
+    iNotif.StartNotifierAndGetResponse( iStatus, KBTObexPasskeyQueryNotifierUid, dummy, iObexPasskey );
+    iObexClient = aObexClient;
+    SetActive();
+
+    FLOG(_L("[BTSU]\t CBTSUPasskeyRequest::StartPassKeyRequestL completed"));
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSURefObjectResolver.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2002 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:  Reference object resolver
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSURefObjectResolver.h"
+#include "BTSUDebug.h"
+#include <utf.h>
+
+// CONSTANTS
+_LIT8( KBTSUElementImage,    "img" );
+_LIT8( KBTSUElementLink,     "link" );
+_LIT8( KBTSUElementObject,   "object" );
+
+_LIT8( KBTSUAttributeSrc,    "src" );
+_LIT8( KBTSUAttributeData,   "data" );
+_LIT8( KBTSUAttributeHref,   "href" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSURefObjectResolver* CBTSURefObjectResolver::NewL(CDesCArrayFlat* aCapabilityList)
+    {
+    CBTSURefObjectResolver* self = new( ELeave ) CBTSURefObjectResolver( aCapabilityList );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::CBTSURefObjectResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSURefObjectResolver::CBTSURefObjectResolver( 
+    CDesCArrayFlat* aObjectList ) : iObjectList( aObjectList )
+    {
+    }
+  
+ // -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::ConstructL ()
+    {
+    }   
+
+ 
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSURefObjectResolver::~CBTSURefObjectResolver()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnStartDocumentL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnStartDocumentL(const Xml::RDocumentParameters& /*aDocParam*/, TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSURefObjectResolver::OnStartDocumentL()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error OnStartDocument"));            
+        }
+   
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnEndDocumentL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnEndDocumentL(TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSURefObjectResolver::EndDocument()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error EndDocument"));            
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::StartElement
+// If a certain element has a certain attribute, append the attribute's
+// value into the object list.
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, 
+								 TInt aErrorCode)    
+    {
+    
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error OnStartElementL"));            
+        }     
+        
+    RString aLocalName = aElement.LocalName();   
+
+    TBuf<KBTSUMaxStringLength> conversionBuf;
+    // Images
+    //
+    if ( aLocalName.DesC() == KBTSUElementImage /*|| aName == KBTSUElementImage()*/ )
+    
+        {                                                         
+        // Check the attributes
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )
+            {
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeSrc )
+                {                              
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC() )); 
+                if(conversionBuf.Length())               
+                    iObjectList->AppendL(conversionBuf );
+                }
+            }                                
+           
+        }
+    else if ( aLocalName.DesC() == KBTSUElementObject() /*|| aName == KBTSUElementObject() */)
+        {
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )
+            {
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeData )
+                {                              
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC() ));   
+                if(conversionBuf.Length())                         
+                    iObjectList->AppendL(conversionBuf );
+                }
+            }                    
+        }
+
+    // Other objects
+    //
+    else if ( aLocalName.DesC() == KBTSUElementLink() /*|| aName == KBTSUElementLink() */)
+        {
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )
+            {
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeHref )
+                {                              
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC() ));                
+                if(conversionBuf.Length())            
+                    iObjectList->AppendL(conversionBuf );
+                
+                }
+            }                      
+        }
+
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnEndElementL
+// -----------------------------------------------------------------------------
+//    
+void CBTSURefObjectResolver::OnEndElementL(const Xml::RTagInfo& /*aElement*/, TInt /*aErrorCode*/)
+    {       
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnContentL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {   
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnStartPrefixMappingL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, 
+								   TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnEndPrefixMappingL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt /*aErrorCode*/)
+    {        
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnIgnorableWhiteSpaceL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnSkippedEntityL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnSkippedEntityL(const RString& /*aName*/, TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnProcessingInstructionL
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, 
+										  TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::OnError
+// -----------------------------------------------------------------------------
+//
+void CBTSURefObjectResolver::OnError(TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSURefObjectResolver::GetExtendedInterface
+// -----------------------------------------------------------------------------
+//
+TAny* CBTSURefObjectResolver::GetExtendedInterface(const TInt32 /*aUid*/)
+    {
+ 
+    return NULL;   
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSUXmlParser.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2002 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:  XML parser implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include <xml/parser.h>
+#include "BTSUXmlParser.h"
+#include "BTServiceUtils.h"
+#include "BTSUCapabilityResolver.h"
+#include "BTSURefObjectResolver.h"
+#include "BTSUDebug.h"
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::CBTSUXmlParser
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSUXmlParser::CBTSUXmlParser()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSUXmlParser::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::ConstructL()"));
+
+    User::LeaveIfError( iFileSession.Connect() );    
+
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUXmlParser* CBTSUXmlParser::NewL()
+    {
+    CBTSUXmlParser* self = new( ELeave ) CBTSUXmlParser;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+  
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSUXmlParser::~CBTSUXmlParser()
+    {
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::~CBTSUXmlParser()"));
+
+    iFileSession.Close();
+
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::~CBTSUXmlParser() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::GetCapabilityListL
+// -----------------------------------------------------------------------------
+//
+CDesCArrayFlat* CBTSUXmlParser::GetCapabilityListL( const TDesC& /*aFileName */)
+    {
+    return NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::GetCapabilityListL
+// -----------------------------------------------------------------------------
+//
+RArray<TBTSUImageCap>* CBTSUXmlParser::GetImgCapabilityListL( const TDesC& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::GetCapabilityListL()"));
+
+    if ( &aFileName == NULL || 
+         aFileName.Length() == 0 ||
+         aFileName.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    // Create result array
+    //
+    RArray<TBTSUImageCap>* array = new (ELeave) RArray<TBTSUImageCap>();
+    CleanupStack::PushL( array );
+
+    // Set content handler
+    //
+    CBTSUCapabilityResolver *resolver = CBTSUCapabilityResolver::NewL( array );
+    CleanupStack::PushL(resolver);
+    // Create parser
+    //
+    Xml::CParser *parser=Xml::CParser::NewL( _L8( "text/xml" ), *resolver );
+    CleanupStack::PushL(parser);
+    // Parse    
+    //
+    Xml::ParseL(*parser, iFileSession, aFileName);
+    
+    if(!resolver->IsCompleted())
+        {
+        User::Leave(KErrCompletion);
+        }
+
+    
+    CleanupStack::PopAndDestroy(2); //parser & resolver  
+    CleanupStack::Pop( array );    
+    
+
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::GetCapabilityListL() completed"));
+
+    return array;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUXmlParser::GetRefObjectListL
+// -----------------------------------------------------------------------------
+//
+CDesCArrayFlat* CBTSUXmlParser::GetRefObjectListL( const TDesC& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::GetRefObjectListL()"));
+
+    if ( &aFileName == NULL || 
+         aFileName.Length() == 0 ||
+         aFileName.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    // Create result array
+    //
+    CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat( KBTSUArrayGranularity );
+    CleanupStack::PushL( array );
+
+    // Set content handler
+    //
+    CBTSURefObjectResolver *resolver = CBTSURefObjectResolver::NewL( array );
+    CleanupStack::PushL(resolver);
+    // Create parser
+    //
+    Xml::CParser *parser = Xml::CParser::NewL( _L8( "text/xml" ), *resolver );
+    CleanupStack::PushL( parser );
+    // Parse
+    //
+    Xml::ParseL(*parser, iFileSession, aFileName);
+        
+    CleanupStack::PopAndDestroy(2); // parser & resolver  
+    CleanupStack::Pop( array );
+
+    FLOG(_L("[BTSU]\t CBTSUXmlParser::GetRefObjectListL() completed"));
+
+    return array;
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceAPI.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2002 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:  Btserviceutils API implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTServiceAPI.h"
+#include "BTServiceStarter.h"
+#include "BTSUDebug.h"
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTServiceAPI::CBTServiceAPI
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTServiceAPI::CBTServiceAPI()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceAPI::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTServiceAPI::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceAPI::ConstructL()"));
+    iStarter = CBTServiceStarter::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceAPI::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CBTServiceAPI* CBTServiceAPI::NewL()
+    {
+    CBTServiceAPI* self = new( ELeave ) CBTServiceAPI();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+    
+// Destructor
+CBTServiceAPI::~CBTServiceAPI()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceAPI::Destructor()"));
+    if ( iStarter )
+    	{    	
+    	delete iStarter;
+    	}
+    FLOG(_L("[BTSU]\t CBTServiceAPI::Destructor() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceAPI::StartServiceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceAPI::StartServiceL( TBTServiceType aService, 
+                                   CBTServiceParameterList* aList )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceAPI::StartServiceL()"));
+    
+    iStarter->StartServiceL( aService, aList );    
+
+    FLOG(_L("[BTSU]\t CBTServiceAPI::StartServiceL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceAPI::StartSynchronousServiceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceAPI::StartSynchronousServiceL( TBTServiceType aService, 
+                                   CBTServiceParameterList* aList )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceAPI::StartSynchronousServiceL()"));
+
+    iStarter->StartServiceL( aService, aList, &iSyncWaiter);
+
+    
+    FLOG(_L("[BTSU]\t CBTServiceAPI::StartSynchronousServiceL() Wait for completion"))
+    iSyncWaiter.Start();
+    
+    FLOG(_L("[BTSU]\t CBTServiceAPI::StartSynchronousServiceL() completed"));
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceClient.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,600 @@
+/*
+* Copyright (c) 2002-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:  Obex client implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <apgcli.h> // RApaLSession
+
+#include "BTServiceClient.h"
+#include "BTServiceUtils.h"
+#include "BTConnectionTimer.h"
+#include "BTSUDebug.h"
+
+const TUint16 KMtuSizeReceiv    = 0xFFFF;  // 64kB
+const TUint16 KMtuSizeTrans     = 0x3000;  // 12kB 
+const TInt    KBufferSize       = 0x4000;  // 16kB
+
+const TInt KBTConnectionTimeout = 20000000; // 20 seconds
+const TInt KBTAbortTimeout      = 2000000;  // 20 seconds
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::CBTServiceClient
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTServiceClient::CBTServiceClient( MBTServiceClientObserver* aObserver ) 
+    : CActive( EPriorityStandard ), 
+      iClientState( EBTSCliIdle ), 
+      iObserver( aObserver )                           
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::ConstructL( const TBTDevAddr& aRemoteDevice,
+                                   const TUint aRemotePort,
+                                   RArray<CObexHeader*> aHeaderList )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::ConstructL()"));
+
+    iTotalBytesSent = 0;
+    // Create Obex Client
+    //
+    TObexBluetoothProtocolInfo info;
+    info.iTransport = KBTSProtocol;
+    info.iAddr.SetBTAddr( aRemoteDevice );
+    info.iAddr.SetPort( aRemotePort );
+    
+    TObexProtocolPolicy obexProtocolPolicy;
+    obexProtocolPolicy.SetReceiveMtu( KMtuSizeReceiv  );
+    obexProtocolPolicy.SetTransmitMtu( KMtuSizeTrans  );
+	
+    iClient = CObexClient::NewL( info, obexProtocolPolicy );
+    iClient->SetCallBack( *this );
+    iPasskeyRequest = new (ELeave) CBTSUPasskeyRequest();
+
+    // Create Connect-object
+    //
+    iConnectObject = CObexNullObject::NewL();
+
+    if ( aHeaderList.Count() > 0 )
+        {
+        for ( TInt index = 0; index < aHeaderList.Count(); index++ )
+            {
+            iConnectObject->AddHeaderL( *aHeaderList[index] );
+            }
+        }
+
+    // Establish client connection
+    //
+    iClient->Connect( *iConnectObject, iStatus );
+    SetActive();
+    iClientState = EBTSCliConnecting;
+    iConnectionTimer = CBTConnectionTimer::NewL(this);
+    iConnectionTimer -> SetTimeOut ( TTimeIntervalMicroSeconds32( KBTConnectionTimeout ) );    
+    iConnectionTimer -> Start();
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTServiceClient* CBTServiceClient::NewL( MBTServiceClientObserver* aObserver,
+                                          const TBTDevAddr& aRemoteDevice,
+                                          const TUint aRemotePort,
+                                          RArray<CObexHeader*> aHeaderList )
+    {
+    CBTServiceClient* self = new( ELeave ) CBTServiceClient( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRemoteDevice, aRemotePort, aHeaderList );
+    CleanupStack::Pop();
+    return self;
+    }
+
+    
+// Destructor
+CBTServiceClient::~CBTServiceClient()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::~CBTServiceClient()"));
+    
+    if(iConnectionTimer)
+        {
+        iConnectionTimer->Cancel();
+        delete iConnectionTimer;
+        iConnectionTimer=NULL;
+        }    
+    Cancel();
+    if(iClient)
+        {
+        delete iClient;
+        iClient = NULL;
+        }    
+    delete iPasskeyRequest;
+    iPasskeyRequest = NULL;
+
+    if ( iConnectObject )
+        {
+        iConnectObject->Reset();
+        delete iConnectObject;
+        iConnectObject = NULL;
+        }
+    if ( iObjectBuffer )
+        {
+        iObjectBuffer->Reset();
+        delete iObjectBuffer;
+        iObjectBuffer = NULL;
+        }
+    if ( iGetObject )
+        {
+        delete iGetObject;
+        iGetObject = NULL;
+        }
+    if ( iPutObject )
+        {
+        iPutObject->Reset();
+        delete iPutObject;
+        iPutObject = NULL;
+        }
+     if ( iPutBufObject )
+        {
+        iPutBufObject->Reset();
+        delete iPutBufObject;
+        iPutBufObject = NULL;
+        }
+           
+    if(iBuffer)
+        {
+        delete iBuffer;
+        iBuffer = NULL;
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::~CBTServiceClient() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::GetObjectL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::GetObjectL( RArray<CObexHeader*>& aHeaderList,
+                                   const TDesC& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::GetObjectL()"));
+
+    if ( iGetObject )
+        {
+        iGetObject->Reset();
+        delete iGetObject;
+        iGetObject = NULL;
+        }
+
+    // Create object
+    //
+    if ( aFileName == KNullDesC )
+        {
+        iObjectBuffer = CBufFlat::NewL( KBTSUDataBufferExpandSize );
+        iGetObject = CObexBufObject::NewL( iObjectBuffer );
+        }
+    else
+        {        
+        iGetObject = CObexBufObject::NewL( NULL );
+        iGetObject->SetDataBufL( aFileName );
+        }
+
+    // Set headers
+    //
+    if ( aHeaderList.Count() > 0 )
+        {
+        for ( TInt index = 0; index < aHeaderList.Count(); index++ )
+            {
+            iGetObject->AddHeaderL( *aHeaderList[index] );
+            }
+        }
+
+    // Send get request
+    //
+    iClient->Get( *iGetObject, iStatus );
+    SetActive();
+    iClientState = EBTSCliGetting;
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::GetObjectL() completed"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::PutObjectL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::PutObjectL( RArray<CObexHeader*>& aHeaderList,
+                                   const TDesC& aFileName )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::PutObjectL()"));
+
+    if ( iPutObject )
+        {
+        iPutObject->Reset();
+        delete iPutObject;
+        iPutObject = NULL;
+        }
+
+    // Create object
+    //
+    iPutObject = CObexFileObject::NewL();
+
+    // Set body
+    //
+    
+    if ( aFileName != KNullDesC )
+        {
+        iPutObject->InitFromFileL ( aFileName );
+        }
+    
+    // Set headers
+    //
+    if ( aHeaderList.Count() > 0 )
+        {
+        for ( TInt index = 0; index < aHeaderList.Count(); index++ )
+            {
+            iPutObject->AddHeaderL( *aHeaderList[index] );
+            }
+        }
+
+    // Send object
+    //
+    iClient->Put( *iPutObject, iStatus );
+	SetActive();
+    iClientState = EBTSCliPutting;
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::PutObjectL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::PutObjectL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::PutObjectL( RArray<CObexHeader*>& aHeaderList,
+                                   RFile& aFile )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::PutObjectL()"));
+
+    if ( iPutObject )
+        {
+        iPutObject->Reset();
+        delete iPutObject;
+        iPutObject = NULL;
+        }
+
+    if ( iPutBufObject )
+        {
+        iPutBufObject->Reset();
+        delete iPutBufObject;
+        iPutBufObject = NULL;
+        }
+    // Create object
+    //
+    iPutBufObject = CObexBufObject::NewL(NULL);
+
+    // Resolve MIME type
+    //
+    
+    RApaLsSession session;
+    HBufC8* mimeType = NULL;
+    TDataType type;
+    
+    TUid uid;
+    // Set headers
+    //
+    if ( aHeaderList.Count() > 0 )
+        {
+        for ( TInt index = 0; index < aHeaderList.Count(); index++ )
+            {
+            iPutBufObject->AddHeaderL( *aHeaderList[index] );
+            }
+        }
+        
+    TDesC8 typeheader=iPutBufObject->Type();   
+    if ( typeheader == KNullDesC8 )    
+        {        
+        User::LeaveIfError( session.Connect() );
+        CleanupClosePushL( session );
+        TInt error = session.AppForDocument( aFile, uid, type );    
+        if ( error == KErrNone )
+            {
+            mimeType = type.Des8().AllocLC();
+            iPutBufObject->SetTypeL(*mimeType);    
+            CleanupStack::PopAndDestroy();
+            }          
+        CleanupStack::Pop(); // session
+        session.Close();       
+        }    
+    
+    //Set object information
+    //
+    TFileName filename;    
+    aFile.Name(filename);
+    
+    TInt size;
+    aFile.Size(size);
+    iPutBufObject->SetLengthL(size);			
+    iPutBufObject->SetNameL(filename);
+    
+    TTime time;
+	if ( aFile.Modified(time) == KErrNone )
+	    {
+		iPutBufObject->SetTimeL(time);
+	    }
+	    
+    RFile file;    
+    file.Duplicate(aFile);
+    
+    iBuffer = CBufFlat::NewL(KBufferSize);
+    iBuffer ->ResizeL(KBufferSize);
+    
+    TObexRFileBackedBuffer bufferdetails(*iBuffer,file,CObexBufObject::ESingleBuffering);  
+    iPutBufObject->SetDataBufL(bufferdetails);         
+    
+    // Send object
+    //        
+    iClient->Put( *iPutBufObject, iStatus );
+	SetActive();
+    iClientState = EBTSCliPutting;
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::PutObjectL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::CloseClientConnection
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::CloseClientConnection()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::CloseClientConnection()"));
+
+    iClient->Disconnect( iStatus );
+   	SetActive();
+    iClientState = EBTSCliDisconnecting;
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::CloseClientConnection() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::GetProgressStatus
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceClient::GetProgressStatus()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::GetProgressStatus()"));
+
+    TInt bytesSent = 0;
+    if ( iPutBufObject )
+        {
+        bytesSent = iPutBufObject->BytesSent();
+        }
+    if ( iPutObject )
+        {
+        bytesSent = iPutObject->BytesSent();
+        }
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceClient::GetProgressStatus() completed, bytes sent %d"), iTotalBytesSent + bytesSent ) );
+
+   // return iTotalBytesSent + bytesSent;
+    return bytesSent;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::GetUserPasswordL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::GetUserPasswordL( const TDesC& /*aRealm*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::GetUserPasswordL()"));
+
+    iPasskeyRequest->StartPassKeyRequestL( iClient );
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::GetUserPasswordL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::DoCancel()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::DoCancel()"));
+    
+    if ( iConnectionTimer )
+        {
+        iConnectionTimer->Cancel();
+        delete iConnectionTimer;
+        iConnectionTimer=NULL;
+        }    
+    // Deleting obexclient is the only way to cancel active requests
+    //                
+    if ( iClient )
+        {
+        delete iClient;
+        iClient = NULL;
+        }    
+    
+    FLOG(_L("[BTSU]\t CBTServiceClient::DoCancel() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceClient::RunL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceClient::RunL()
+    {
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceClient::RunL() status %d"), iStatus.Int() ) );
+    if ( !iObserver )
+        {
+        return;    
+        }
+    switch ( iClientState )
+        {
+        case EBTSCliConnecting:
+            {
+            FLOG(_L("[BTSU]\t CBTServiceClient::RunL() EBTSCliConnecting"));
+            iConnectObject->Reset();
+            if(iConnectionTimer)
+                {
+                iConnectionTimer->Cancel();
+                delete iConnectionTimer;
+                iConnectionTimer=NULL;
+                }    
+            iObserver->ConnectCompleted( iStatus.Int() );
+            break;
+            }
+
+        case EBTSCliPutting:
+            {
+            FLOG(_L("[BTSU]\t CBTServiceClient::RunL() EBTSCliPutting"));
+            if(iPutBufObject)
+                {
+                iTotalBytesSent += iPutBufObject->BytesSent();    
+                }
+            else
+                {
+                 iTotalBytesSent += iPutObject->BytesSent();         
+                }
+			   
+			const CObexHeaderSet& response=iClient->GetPutFinalResponseHeaders();		
+			if ( iPutBufObject )
+				{
+				iPutBufObject->Reset();
+				delete iPutBufObject;
+				iPutBufObject = NULL;
+				}
+				
+			if ( iPutObject )
+				{
+				iPutObject->Reset();
+				delete iPutObject;
+				iPutObject = NULL;
+				}
+			if(iBuffer)
+                {
+                delete iBuffer;
+                iBuffer = NULL;
+                }
+			//put there call getEnv
+            iObserver->PutCompleted( iStatus.Int(), &response);
+            FLOG(_L("[BTSU]\t CBTServiceClient::RunL() EBTSCliPutting done"));
+            break;
+            }
+
+        case EBTSCliGetting:
+            {
+            iObserver->GetCompleted( iStatus.Int(), iGetObject );
+            break;
+            }
+
+        case EBTSCliDisconnecting:
+            {
+            // Any errors are ignored
+            //
+            iObserver->ClientConnectionClosed();
+            break;
+            }
+
+        case EBTSCliIdle:
+        default:
+           {
+           FLOG(_L("[BTSU]\t CBTServiceClient::RunL() ERROR, unhandled case"));           
+           break;
+           }
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceClient::RunL() completed"));
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTServiceClient::ConnectionTimedOut
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceClient::ConnectionTimedOut()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::ConnectionTimedOut"));    
+    switch ( iClientState )
+        {
+        case EBTSCliConnecting:
+            {
+            iObserver->ConnectTimedOut();      
+            break;
+            }
+        case EBTSCliGetting:
+            {
+            iObserver->GetCompleted( KErrAbort, iGetObject );    
+            break;
+            }    
+        case EBTSCliPutting:
+            {
+            const CObexHeaderSet& response=iClient->GetPutFinalResponseHeaders();	    
+            iObserver->PutCompleted( KErrAbort, &response );    
+			break;
+            }        
+        default:    
+        FLOG(_L("[BTSU]\t CBTServiceClient::ConnectionTimedOut unhandled client state "));
+        }
+          
+    FLOG(_L("[BTSU]\t CBTServiceClient::ConnectionTimedOut"));    
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceClient::Abort
+// -----------------------------------------------------------------------------
+//	    
+void CBTServiceClient::Abort()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceClient::Abort"));        
+    if ( iClient && ( iClientState == EBTSCliPutting || iClientState == EBTSCliGetting )  )
+        {    
+        if ( iConnectionTimer )    
+            {
+            delete iConnectionTimer;
+            iConnectionTimer = NULL;    
+            }
+        TRAPD(trapErr, iConnectionTimer = CBTConnectionTimer::NewL(this) );
+        if ( trapErr  != KErrNone)
+            {
+            iObserver->ConnectCompleted( KErrAbort );        
+            return;
+            }        
+        iConnectionTimer -> SetTimeOut ( TTimeIntervalMicroSeconds32( KBTAbortTimeout ) );    
+        iConnectionTimer -> Start();    
+        iClient->Abort();    
+        }
+    else if ( iClient && iClientState == EBTSCliConnecting)
+        {
+        iObserver->ConnectCompleted( KErrAbort );    
+        }
+    FLOG(_L("[BTSU]\t CBTServiceClient::Abort"));            
+    
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceParameterList.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,571 @@
+/*
+* Copyright (c) 2002 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:  parameter list implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTServiceParameterList.h"
+#include "BTSUImageConverter.h"
+#include "BTSUXmlParser.h"
+#include "BTSUDebug.h"
+
+#include <apgcli.h> // RApaLSession
+#include <apmstd.h> // TDataType
+#include <imageconversion.h> //´Type solving
+#include <caf/content.h>
+
+// CONSTANTS
+
+_LIT( KBIPImageTypes, "JPEGBMPGIFWBMPPNGJPEG2000" );
+
+
+const TInt KBIPImageTypesLength     = 30;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::CBTServiceParameterList
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTServiceParameterList::CBTServiceParameterList()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTServiceParameterList::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ConstructL()"));    
+    iRemovedImageCount=0;
+    User::LeaveIfError( iFileSession.Connect() );
+    iFileSession.ShareProtected();
+
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CBTServiceParameterList* CBTServiceParameterList::NewL()
+    {
+    CBTServiceParameterList* self = new( ELeave ) CBTServiceParameterList;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CBTServiceParameterList* CBTServiceParameterList::NewLC()
+    {
+    CBTServiceParameterList* self = new( ELeave ) CBTServiceParameterList;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor
+CBTServiceParameterList::~CBTServiceParameterList()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::~CBTServiceParameterList()"));
+
+    TInt index = 0;
+
+    for ( ; index < iXhtmlList.Count(); index++ )
+        {
+        delete iXhtmlList[index].iFileName;
+        delete iXhtmlList[index].iRefObjectList;
+        }
+
+    for ( index = 0; index < iImageList.Count(); index++ )
+        {  
+                   
+        delete iImageList[index].iMimeType;
+        delete iImageList[index].iDisplayName;
+        if(iImageList[index].iFile.SubSessionHandle())
+            {
+            iImageList[index].iFile.Close();
+            }
+        
+        }
+        
+    for ( index = 0; index < iObjectList.Count(); index++ )
+    	{
+    	if(iObjectList[index].SubSessionHandle())
+    		{
+    		iObjectList[index].Close();
+    		}
+    	}
+
+    iXhtmlList.Close();
+    iImageList.Close();    
+    iObjectList.Close();
+    iFileSession.Close();
+    
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::~CBTServiceParameterList() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::AddXhtmlL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceParameterList::AddXhtmlL( const TDesC& aFilePath )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddXhtmlL()"));
+
+    if ( &aFilePath == NULL || 
+         aFilePath.Length() == 0 ||
+         aFilePath.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    // Allocate memory for filename
+    //
+    HBufC* file = aFilePath.AllocL();
+    CleanupStack::PushL( file );
+
+    // Resolve referenced objects
+    //
+    CBTSUXmlParser* parser = CBTSUXmlParser::NewL();
+    CleanupStack::PushL( parser );
+
+    CDesCArrayFlat* list = parser->GetRefObjectListL( aFilePath );
+    CleanupStack::PushL( list );
+
+    // Store parameter into list
+    //
+    TBTSUXhtmlParam param;
+    param.iFileName = file;
+    param.iRefObjectList = list;
+    User::LeaveIfError( iXhtmlList.Append( param ) );
+
+    CleanupStack::Pop( 3 ); // list, parser, file
+    delete parser;
+
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddXhtmlL() completed"));
+    }    
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::AddImageL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceParameterList::AddImageL( const TDesC& aFilePath )
+    {   
+    if ( &aFilePath == NULL || 
+         aFilePath.Length() == 0 ||
+         aFilePath.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        } 
+    RFile file;
+    User::LeaveIfError( file.Open( iFileSession, aFilePath, EFileShareReadersOnly) );
+    AddImageL(file);
+    file.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::AddImageL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceParameterList::AddImageL( RFile aFile )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddImageL()"));
+	TBool found;
+	TInt  retVal;
+	TBool isprotected = EFalse;
+   
+    //chekc that file handle is correct
+    if(!aFile.SubSessionHandle())
+        {
+        User::Leave( KErrArgument );
+        }
+        
+    //check if files are drm protected 
+        
+	ContentAccess::CContent* drm = ContentAccess::CContent::NewL(aFile);
+    drm->GetAttribute(ContentAccess::EIsProtected, isprotected);
+    delete drm;       
+    
+    
+    if(isprotected)
+   		{
+   		User::Leave( KErrNotSupported );
+   		}
+    
+
+    CBTSUImageConverter * imageConverter = CBTSUImageConverter::NewL();
+    CleanupStack::PushL( imageConverter );
+
+    // Allocate memory for filename
+    //
+
+    
+    // Resolve MIME type
+    //
+    RApaLsSession session;
+    HBufC8* mimeType = NULL;
+    TDataType type;
+    
+    TUid uid;
+
+    User::LeaveIfError( session.Connect() );
+    CleanupClosePushL( session );
+   
+    User::LeaveIfError( session.AppForDocument( aFile, uid, type ) );
+    mimeType = type.Des8().AllocL();
+      
+    CleanupStack::Pop(); // session
+    session.Close();   
+    
+    CleanupStack::PushL( mimeType );
+
+    // Resolve Display name
+    //    
+    HBufC* displayName = imageConverter->GetDisplayNameL( *mimeType );
+    CleanupStack::PushL( displayName );
+    
+    RFileExtensionMIMETypeArray fileExtensions;
+    
+    //Resolve what format are suported
+    TRAP( retVal, CImageDecoder::GetFileTypesL( fileExtensions ) );	
+	if( retVal != KErrNone )
+		{
+		fileExtensions.ResetAndDestroy();
+        User::Leave( retVal );
+		}
+		
+	found=EFalse;
+	TBuf<KBIPImageTypesLength> types = KBIPImageTypes();
+	
+	for( TInt index = 0; index < fileExtensions.Count(); index++ )
+		{
+		retVal=displayName->Compare((*fileExtensions[index]).DisplayName());		
+		if(retVal==0 &&  types.Find((*fileExtensions[index]).DisplayName())!=KErrNotFound )
+			{
+			found=ETrue;		
+			}
+		}		
+	fileExtensions.ResetAndDestroy();	
+	if(found==EFalse)
+		{
+		User::Leave(KErrNotSupported);
+		}
+	
+		
+    // Resolve file size
+    //
+    TInt fileSize = 0;
+    User::LeaveIfError( aFile.Size( fileSize ) );
+          	
+	
+    // Resolve width and height
+    //    
+    TSize decodeSize = imageConverter->GetImageSizeL( aFile );
+    
+    
+    // Store parameter into list
+    //
+    TBTSUImageParam param;
+    
+    param.iFile.Duplicate(aFile);
+    param.iMimeType = mimeType;
+    param.iDisplayName = displayName;
+    param.iFileSize = fileSize;
+    param.iPixelSize = decodeSize;    
+    param.iSend=EFalse;
+    
+    
+    User::LeaveIfError( iImageList.Append( param ) );
+
+    CleanupStack::Pop( 3 ); // displayName, mimeType, imageConverter
+    delete imageConverter;    
+
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddImageL() completed"));
+	}
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::AddObjectL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBTServiceParameterList::AddObjectL( const TDesC& aFilePath )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddObjectL()"));
+    
+    if ( &aFilePath == NULL || 
+         aFilePath.Length() == 0 ||
+         aFilePath.Length() > KMaxFileName )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    RFile file;
+    User::LeaveIfError( file.Open( iFileSession, aFilePath, EFileShareReadersOnly) );
+    AddObjectL(file);
+    file.Close();
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddObjectL() completed"));
+    }
+    
+ // -----------------------------------------------------------------------------
+// CBTServiceParameterList::AddObjectL
+// -----------------------------------------------------------------------------
+//   
+ EXPORT_C void CBTServiceParameterList::AddObjectL( RFile aFile )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddObjectL()"));
+    
+        //chekc that file handle is correct
+    if(!aFile.SubSessionHandle())
+        {
+        User::Leave( KErrArgument );
+        }
+    RFile file;
+    
+    file.Duplicate(aFile);
+
+    iObjectList.AppendL( file );
+
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::AddObjectL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::XhtmlCount
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceParameterList::XhtmlCount() const
+    {
+    return iXhtmlList.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ImageCount
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceParameterList::ImageCount() const
+    {
+    return iImageList.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ObjectCount
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceParameterList::ObjectCount() const
+    {   
+    return iObjectList.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::XhtmlAt
+// -----------------------------------------------------------------------------
+//
+TBTSUXhtmlParam CBTServiceParameterList::XhtmlAt( TInt aIndex ) const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::XhtmlAt()"));
+    __ASSERT_DEBUG( aIndex >= 0 && aIndex < XhtmlCount(), BTSUPanic( EBTSUPanicOutOfRange ) );
+
+    TBTSUXhtmlParam param;
+    param.iFileName = iXhtmlList[ aIndex].iFileName;
+    param.iRefObjectList = iXhtmlList[ aIndex].iRefObjectList;
+
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::XhtmlAt() completed"));
+
+    return param;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ImageAt
+// -----------------------------------------------------------------------------
+//
+TBTSUImageParam CBTServiceParameterList::ImageAtL( TInt aIndex ) const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ImageAt()"));    
+    
+    TBTSUImageParam param; 
+    
+    if(aIndex<0 || aIndex> ImageCount() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		}
+    
+    param.iFile        = iImageList[aIndex].iFile;
+    param.iMimeType    = iImageList[aIndex].iMimeType;
+    param.iDisplayName = iImageList[aIndex].iDisplayName;
+    param.iPixelSize   = iImageList[aIndex].iPixelSize;
+    param.iFileSize    = iImageList[aIndex].iFileSize;        
+    param.iSend        = iImageList[aIndex].iSend;
+	
+	
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ImageAt() completed"));
+
+    return param;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ObjectAt
+// -----------------------------------------------------------------------------
+//
+RFile& CBTServiceParameterList::ObjectAtL( TInt aIndex ) 
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ObjectAt()"));
+    
+    if(aIndex<0 || aIndex> iObjectList.Count() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		}
+    return iObjectList[aIndex];
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::HasAnyReferencedObjects
+// -----------------------------------------------------------------------------
+//
+TBool CBTServiceParameterList::HasAnyReferencedObjects() const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::HasAnyReferencedObjects()"));
+
+    TBool result = EFalse;
+
+    for ( TInt index = 0; index < iXhtmlList.Count(); index++ )
+        {
+        if ( iXhtmlList[index].iRefObjectList->Count() > 0 )
+            {
+            result = ETrue;
+            break;
+            }
+        }
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceParameterList::HasAnyReferencedObjects() completed with %d"), result ));
+
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ObjectListSizeL
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceParameterList::ObjectListSizeL() const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ObjectListSizeL()"));
+ 
+    TInt totalFileSize = 0; 	
+    
+    for ( TInt index = 0; index < iObjectList.Count(); index++ )
+        {                
+        TInt fileSize = 0;
+        iObjectList[index].Size( fileSize );
+        totalFileSize += fileSize;        
+        }
+    return totalFileSize;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ImageListSize
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceParameterList::ImageListSize() const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceParameterList::ImageListSize()"));
+
+    TInt totalFileSize = 0;
+    for ( TInt index = 0; index < iImageList.Count(); index++ )
+        {
+        totalFileSize += iImageList[index].iFileSize;
+        }
+
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceParameterList::ImageListSize %d"), totalFileSize ));
+    return totalFileSize;
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::RemoveImageL
+// -----------------------------------------------------------------------------
+//
+ 
+ void CBTServiceParameterList::RemoveImageL(TInt aIndex)
+ 	{
+ 	if(aIndex<0 || aIndex> iImageList.Count() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		}
+ 	
+    delete iImageList[aIndex].iMimeType;
+    delete iImageList[aIndex].iDisplayName;	
+    iImageList.Remove(aIndex);
+    iRemovedImageCount++;
+ 	}
+ 	
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::RemovedImageCount
+// -----------------------------------------------------------------------------
+// 
+ TInt CBTServiceParameterList::RemovedImageCount()
+ 	{
+ 	return iRemovedImageCount;
+ 	}
+ 	
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ResetImageHandleL
+// -----------------------------------------------------------------------------
+//  	
+void CBTServiceParameterList::ResetImageHandleL(TInt aIndex)
+ 	{
+ 	if(aIndex<0 || aIndex> iImageList.Count() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		} 	    
+    iImageList[aIndex].iFile=RFile();
+ 	}
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ResetObjectHandleL
+// -----------------------------------------------------------------------------
+// 	
+void CBTServiceParameterList::ResetObjectHandleL(TInt aIndex)
+ 	{
+    if(aIndex<0 || aIndex> iObjectList.Count() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		}
+ 	iObjectList[aIndex]=RFile();
+ 	}
+
+
+// -----------------------------------------------------------------------------
+// CBTServiceParameterList::ResetObjectHandleL
+// -----------------------------------------------------------------------------
+// 	
+void CBTServiceParameterList::MarkAsSendL(TInt aIndex)
+ 	{
+    if(aIndex<0 || aIndex> iImageList.Count() )
+ 		{
+ 		User::Leave(KErrGeneral);
+ 		}
+ 	iImageList[aIndex].iSend=ETrue;
+ 	}
+
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,1280 @@
+/*
+* Copyright (c) 2002-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:  Service starter implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BTServiceStarter.h"
+#include "BTSUDebug.h"
+#include "BTSOPPController.h"
+#include "BTSBIPController.h"
+#include "BTSBPPController.h"
+
+#include <Obexutils.rsg>
+#include <obexutilsuilayer.h>
+#include <obexutilsmessagehandler.h>
+#include <btnotif.h>
+#include <featmgr.h>
+#include "BTSProgresstimer.h"
+#include <hbdevicenotificationdialogsymbian.h>
+#include <btservices/bluetoothdevicedialogs.h>
+
+// CONSTANTS
+
+// From BT SIG - Assigned numbers
+const TUint KBTServiceOPPSending        = 0x1105;
+const TUint KBTServiceDirectPrinting    = 0x1118;
+const TUint KBTServiceImagingResponder  = 0x111B;
+
+const TUint KBTProgressInterval         = 1000000;
+
+
+_LIT(KSendingDialog,"com.nokia.hb.btdevicedialog/1.0");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::CBTServiceStarter
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTServiceStarter::CBTServiceStarter() 
+    : CActive( CActive::EPriorityStandard ),
+      iBTEngDiscovery(NULL),
+      iService( EBTSendingService ),
+      iServiceStarted( EFalse ),
+      iMessageServerIndex(0),
+      iBytesSendWithBIP(0),
+      iProgressDialogActive(EFalse),
+      iUserCancel(EFalse), 
+      iFeatureManagerInitialized(EFalse),
+      iTriedBIP(EFalse),
+      iTriedOPP(EFalse)
+    {    
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::ConstructL()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ConstructL()"));
+    iDevice = CBTDevice::NewL();
+//    iDialog = CObexUtilsDialog::NewL( this );
+    iDeviceDialog = CHbDeviceDialogSymbian::NewL();
+    iProgressDialog = CHbDeviceProgressDialogSymbian::NewL(CHbDeviceProgressDialogSymbian::EWaitDialog,this);
+    
+    FeatureManager::InitializeLibL();
+    iFeatureManagerInitialized = ETrue;
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTServiceStarter* CBTServiceStarter::NewL()
+    {
+    CBTServiceStarter* self = new( ELeave ) CBTServiceStarter();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+CBTServiceStarter::~CBTServiceStarter()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::Destructor()"));
+    if ( iMessageServerIndex != 0 )
+        {
+        TRAPD( notUsedRetVal, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ) );
+        notUsedRetVal=notUsedRetVal;
+        FTRACE(FPrint(_L("[BTSU]\t ~CBTServiceStarter() delete ob entry %d"), notUsedRetVal ) );
+        }
+    StopTransfer(KErrCancel); // Cancels active object
+    
+    delete iList;
+    delete iDevice;
+
+    delete iController;
+    delete iBTEngDiscovery;
+ //   delete iDialog;
+    delete iDeviceDialog;
+    delete iProgressDialog;
+    if(iProgressTimer)
+        {
+        delete iProgressTimer;
+        }
+
+    if(iWaiter && iWaiter->IsStarted() )
+        {
+        iWaiter->AsyncStop();
+        }
+    delete iBTEngSettings;
+    
+    if ( iFeatureManagerInitialized )
+        {
+        FeatureManager::UnInitializeLib();
+        }
+    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::Destructor() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::StartServiceL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::StartServiceL( TBTServiceType aService, 
+                                       CBTServiceParameterList* aList,
+                                       CActiveSchedulerWait* aWaiter )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL()"));
+   
+	// Delete old list and take ownership of the new one
+    //
+	
+	delete iList;
+	iList = aList;
+
+    if ( iServiceStarted )
+        {
+        User::Leave( KErrInUse );
+        }
+    if ( !ValidParameters( aService, aList ) )
+        {
+        User::Leave( KErrArgument );
+        }	
+    
+    // Store the waiter pointer, a NULL value is also accepted
+    //
+    iWaiter = aWaiter;
+
+    // Store the requested service
+    //
+    iService = aService;
+
+    if( !iBTEngSettings )
+        {
+        iBTEngSettings = CBTEngSettings::NewL( this );
+        }
+    TBTPowerStateValue power = EBTPowerOff;
+    User::LeaveIfError( iBTEngSettings->GetPowerState( power ) );
+    TBool offline = EFalse;
+    if( !power )
+        {
+        //offline = CheckOfflineModeL();
+         offline = EFalse;
+        }
+    if( !offline )
+        {
+        FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL() Phone is online, request temporary power on."));
+		TurnBTPowerOnL( power );
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL() completed"));
+    }
+    
+
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ControllerComplete
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::ControllerComplete( TInt aStatus )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ControllerComplete()"));    
+    TInt error;
+    if ( iAllSend ) //stop transfer if everything is send
+        {
+        StopTransfer( aStatus );	      	        
+        return;    
+        }
+    if(( aStatus==KErrNone || aStatus==EBTSNoError ) && 
+        iState == EBTSStarterFindingBIP )
+        {
+        iBytesSendWithBIP=0;
+        if( iProgressGetter )
+            {
+            iBytesSendWithBIP=iProgressGetter->GetProgressStatus();
+            iProgressGetter=NULL;
+            delete iController; 
+            iController = NULL;            
+            }
+        if ( !iBTEngDiscovery )
+            {
+            TRAPD(err, iBTEngDiscovery = CBTEngDiscovery::NewL(this) );
+            if (err != KErrNone )
+                {
+                StopTransfer(EBTSPuttingFailed);	      	
+                return;
+                }
+            }
+        error=iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
+                               TUUID(KBTServiceOPPSending));	                 
+        if( error == KErrNone )
+	      	{
+	      	iState = EBTSStarterFindingOPP;	
+        	}
+        else
+        	{
+        	StopTransfer(EBTSPuttingFailed);	      	
+       		}		                           
+        }
+    else
+        {
+        StopTransfer( aStatus );	      	        
+        }   
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ControllerComplete() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::GetProgressStatus
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceStarter::GetProgressStatus()
+    {    
+    if ( iProgressGetter )
+        {
+        return iProgressGetter->GetProgressStatus()+iBytesSendWithBIP;       
+        }
+    else
+        {
+        return iBytesSendWithBIP;
+        }
+    }
+
+void CBTServiceStarter::UpdateProgressInfoL()
+    {
+    HBufC* key = HBufC::NewL(50);
+    CleanupStack::PushL(key);
+   
+    HBufC* value = HBufC::NewL(50);
+    CleanupStack::PushL(value);
+    
+    CHbSymbianVariantMap* map = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL(map);
+    
+    TInt progress = GetProgressStatus();
+    
+    key->Des().Copy(_L("progressValue"));
+    CHbSymbianVariant* progressvalue = CHbSymbianVariant::NewL(&progress, CHbSymbianVariant::EInt);
+    map->Add(*key,progressvalue);
+    
+    key->Des().Copy(_L("currentFileIdx"));
+    value->Des().AppendNum(iFileIndex);
+    CHbSymbianVariant* currentFileIdx = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,currentFileIdx);
+
+    
+    TInt ret = iDeviceDialog->Update(*map);
+    
+    CleanupStack::PopAndDestroy(map);
+    CleanupStack::PopAndDestroy(value);            
+    CleanupStack::PopAndDestroy(key);
+    
+    
+    if ( iProgressTimer )
+        {
+        iProgressTimer->Tickle();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ValidParameters
+// -----------------------------------------------------------------------------
+//
+TBool CBTServiceStarter::ValidParameters( 
+    TBTServiceType aService, const CBTServiceParameterList* aList) const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ValidParameters()"));
+
+    TBool result = EFalse;
+
+    if ( aList != NULL )
+        {
+        switch ( aService )
+            {
+            case EBTSendingService:
+                {
+                // Sending service must have object or image parameters
+                //
+                if ( aList->ObjectCount() > 0 || aList->ImageCount() > 0 )
+                    {
+                    result = ETrue;
+                    }
+                break;
+                }
+            case EBTPrintingService:
+                {
+                // Printing service must have xhtml parameters
+                //
+                if ( aList->XhtmlCount() > 0 )
+                    {
+                    result = ETrue;
+                    }       
+                break;
+                }
+            case EBTObjectPushService:
+                {
+                // Sending service must have object or image parameters
+                //
+                if ( aList->ObjectCount() > 0 || aList->ImageCount() > 0 )
+                    {
+                    result = ETrue;
+                    }      
+                break;
+                }
+            default:
+                {
+                result = EFalse;
+                break;
+                }
+            }
+        }
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter::ValidParameters() completed with %d"), result ) );
+
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::StartProfileSelectL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::StartProfileSelectL( TBTServiceType aService )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL()"));    
+    LaunchWaitNoteL();   
+    iAllSend=EFalse;  
+    iSendToBIPOnlyDevice = EFalse;
+    
+    if ( !iBTEngDiscovery )
+        {
+        iBTEngDiscovery = CBTEngDiscovery::NewL(this);
+        }
+    
+    if ( !FeatureManager::FeatureSupported( KFeatureIdBtImagingProfile ) && (aService != EBTPrintingService) )
+        {
+        // If BTimagingProfile is disabled, use OPP instead.
+        User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(), 
+                                                                                       TUUID(KBTServiceOPPSending)));
+        iState = EBTSStarterFindingOPP;  
+        return;
+        }
+    
+    switch ( aService  )
+        {
+        case EBTSendingService: // Find OPP
+            {            
+            if ( iList->ObjectCount() > 0 )  // We try to send files with OPP profile as long as it contains non-bip objects
+                {
+                FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() OPP"));    
+                User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(), 
+                                                                                TUUID(KBTServiceOPPSending)));
+                iState = EBTSStarterFindingOPP;          
+                }
+            else if(iList->ObjectCount() == 0 && iList->ImageCount() > 0)
+                {
+                FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BIP")); 
+                User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
+                                                                                TUUID(KBTServiceImagingResponder)));
+                iState = EBTSStarterFindingBIP;
+                }
+            break;
+            }
+        case EBTPrintingService: // Find BPP
+            {
+            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BPP"));
+            User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
+                TUUID(KBTServiceDirectPrinting)));
+            iState = EBTSStarterFindingBPP;            
+            break;
+            }
+        case EBTObjectPushService: // Find BIP
+            {
+            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BIP"));
+            User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
+                TUUID(KBTServiceOPPSending)));
+            iState = EBTSStarterFindingOPP;            
+            break;
+            }
+        default:
+            {
+            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() ERROR, unhandled case"));            
+            break;
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() completed"));
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::StartProfileL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::StartProfileL( TBTServiceProfile aProfile )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL()"));
+
+    switch ( aProfile )
+        {
+        case EBTSBPP:
+            {            
+            iController = CBTSBPPController::NewL( this, iClientChannel, 
+                                                   iDevice->BDAddr(), iList,
+                                                   iBTEngDiscovery );
+            break;
+            }
+        case EBTSOPP:
+            {
+            iController = CBTSOPPController::NewL( this, iClientChannel, 
+                                                   iDevice->BDAddr(), iList );
+            break;
+            }
+        case EBTSBIP:
+            {
+            iController = CBTSBIPController::NewL( this, iClientChannel, 
+                                                   iDevice->BDAddr(), iList );
+            break;
+            }
+        case EBTSNone:
+        default:
+            {
+            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL() ERROR, unhandled case"));            
+            break;
+            }
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::LaunchWaitNoteL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::LaunchWaitNoteL()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchWaitNoteL()"));
+    if ( iService == EBTPrintingService )
+        {
+ //       iDialog->LaunchWaitDialogL( R_BT_PRINTING_WAIT_NOTE );
+        }
+    else
+        {
+        //       iDialog->LaunchWaitDialogL( R_BT_CONNECTING_WAIT_NOTE );
+        _LIT(KConnectText, "Connecting...");
+        iProgressDialog->SetTextL(KConnectText);
+        iProgressDialog->ShowL();
+        
+        }    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchWaitNoteL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::CancelWaitNote
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::CancelWaitNote()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelWaitNote()"));
+
+  //  if ( iDialog )
+  //      {
+        //       TRAP_IGNORE( iDialog->CancelWaitDialogL() );
+        if(iProgressDialog)
+            {
+            //This has to be tested
+            iProgressDialog->Close();
+            }
+    //    }
+
+    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelWaitNote() completed"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::LaunchProgressNoteL
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::LaunchProgressNoteL( MBTServiceProgressGetter* aGetter,
+                                             TInt aTotalSize, TInt aFileCount)
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchProgressNoteL()"));
+    (void) aTotalSize;
+    
+    if ( iService != EBTPrintingService )
+        {    
+        iProgressGetter = aGetter;     
+        CancelWaitNote();        
+        
+        if ( !iProgressDialogActive )
+        	{
+            iFileCount = aFileCount;
+        	iMessageServerIndex = TObexUtilsMessageHandler::CreateOutboxEntryL( 
+            KUidMsgTypeBt, R_BT_SEND_OUTBOX_SENDING );        
+   //     	iDialog->LaunchProgressDialogL( this, aTotalSize, 
+     //        								R_BT_SENDING_DATA, KBTProgressInterval );	
+            CHbSymbianVariantMap* map = CHbSymbianVariantMap::NewL();
+            CleanupStack::PushL(map);
+            if ( iProgressTimer )
+                {
+                iProgressTimer->Cancel();
+                delete iProgressTimer;
+                iProgressTimer = NULL;
+                }
+
+            iProgressTimer = CBTSProgressTimer::NewL( this );
+            iProgressTimer->SetTimeout( KBTProgressInterval );
+            
+            iProgressTimer->Tickle();
+
+            CHbSymbianVariant* value = NULL;
+            TBuf<6> key;
+            TInt data = TBluetoothDialogParams::ESend;
+            key.Num(TBluetoothDialogParams::EDialogType);
+            value = CHbSymbianVariant::NewL( (TAny*) &data, CHbSymbianVariant::EInt );
+            User::LeaveIfError(map->Add( key, value ));   // Takes ownership of value
+            iDeviceDialog->Show(KSendingDialog(),*map,this);
+            CleanupStack::PopAndDestroy(map);
+        	}        
+        iProgressDialogActive=ETrue;     
+        }
+
+    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchProgressNoteL() completed"));
+    }
+
+void CBTServiceStarter::UpdateProgressNoteL(TInt aFileSize,TInt aFileIndex, const TDesC& aFileName )
+    {
+    HBufC* key = HBufC::NewL(50);
+    CleanupStack::PushL(key);
+   
+    HBufC* value = HBufC::NewL(50);
+    CleanupStack::PushL(value);
+    
+    CHbSymbianVariantMap* map = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL(map);
+    
+    iFileIndex = aFileIndex+1;
+    key->Des().Copy(_L("currentFileIdx"));
+    value->Des().AppendNum(aFileIndex+1);
+    CHbSymbianVariant* currentFileIdx = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,currentFileIdx);
+    
+    key->Des().Copy(_L("totalFilesCnt"));
+    value->Des().Zero();
+    value->Des().AppendNum(iFileCount);
+    CHbSymbianVariant* totalFilesCnt = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,totalFilesCnt);
+
+    
+    key->Des().Copy(_L("destinationName"));
+    if ( iDevice->IsValidFriendlyName() )
+        {
+        value->Des().Copy( iDevice->FriendlyName() );
+        }
+    else 
+        {
+        value->Des().Copy( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()));
+        }
+
+    CHbSymbianVariant* destinationName = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,destinationName);
+    
+    key->Des().Copy(_L("fileName"));
+    value->Des().Copy(aFileName);
+    CHbSymbianVariant* fileName = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,fileName);
+    
+    key->Des().Copy(_L("fileSzTxt"));
+    value->Des().Zero();
+    if(aFileSize < 1024)
+        {
+        value->Des().AppendNum(aFileSize);
+        value->Des().Append(_L(" Bytes"));
+        }
+    else
+        {
+        TInt filesize =  aFileSize/1024;
+        value->Des().AppendNum(filesize);
+        value->Des().Append(_L(" KB"));
+        }
+
+    CHbSymbianVariant* fileSzTxt = CHbSymbianVariant::NewL(value, CHbSymbianVariant::EDes);
+    map->Add(*key,fileSzTxt);
+    
+    
+    key->Des().Copy(_L("fileSz"));
+    CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL(&aFileSize, CHbSymbianVariant::EInt);
+    map->Add(*key,fileSz);
+
+
+    
+    TInt ret = iDeviceDialog->Update(*map);
+    CleanupStack::PopAndDestroy(map);
+    CleanupStack::PopAndDestroy(value);            
+    CleanupStack::PopAndDestroy(key);
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::CancelProgressNote
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::CancelProgressNote()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelProgressNote()"));
+
+ //   if ( iDialog )
+        {
+  //      TRAP_IGNORE( iDialog->CancelProgressDialogL() );
+    if ( iProgressTimer )
+         {
+         iProgressTimer->Cancel();
+         delete iProgressTimer;
+         iProgressTimer = NULL;
+         }
+        }
+    if(iDeviceDialog)
+         {
+         iDeviceDialog->Cancel();
+         }
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::DialogDismissed
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::DialogDismissed( TInt aButtonId )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDismissed()"));   
+    if( aButtonId == EAknSoftkeyCancel )
+        {
+        FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDissmissed(), cancelled by user"));        
+        iUserCancel=ETrue;
+        if ( iController )
+            {
+            iController->Abort();
+            }
+        else 
+           {
+           StopTransfer(KErrCancel);
+           }    
+        }
+    else if ( aButtonId == EAknSoftkeyNo )
+        {
+        // user abortion
+        //
+        iUserCancel = ETrue;
+        StopTransfer( KErrCancel );
+        }
+    FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDismissed() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ShowNote
+// -----------------------------------------------------------------------------
+//
+void CBTServiceStarter::ShowNote( TInt aReason ) const
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ShowNote()"));
+     
+//    TInt resource = 0;
+    TBuf<255> buf;
+
+    switch ( aReason )
+        {
+        case EBTSNoError:
+            {
+    /*        if ( iService == EBTPrintingService )
+                {
+               // resource = R_BT_DATA_SENT2;
+                
+                _LIT(KText, "Data Sent");
+                buf.Copy(KText);
+                }
+            else
+                {
+                //resource = R_BT_DATA_SENT;*/
+                _LIT(KText, "All files Sent to ");
+                buf.Copy(KText);
+                if ( iDevice->IsValidFriendlyName() )
+                    {
+                    buf.Append( iDevice->FriendlyName() );
+                    }
+                else 
+                    {
+                   TRAP_IGNORE( buf.Append( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())));
+                    }
+
+
+//                }
+            break;
+            }
+        case EBTSConnectingFailed:
+            {
+            //resource = R_BT_DEV_NOT_AVAIL;
+            _LIT(KText, "Cannot establish Bluetooth connection");
+            buf.Copy(KText);
+            break;
+            }
+        case EBTSGettingFailed:
+        case EBTSPuttingFailed:
+            {
+            if ( iService == EBTPrintingService )
+                {
+                _LIT(KText, "Sending failed");
+                //resource = R_BT_FAILED_TO_SEND2;
+                buf.Copy(KText);
+                }
+            else
+                {
+                _LIT(KText, "Failed to send Data");
+                //resource = R_BT_FAILED_TO_SEND;
+                buf.Copy(KText);
+                }
+            break;
+            }
+        case EBTSNoSuitableProfiles:
+            {
+            if ( iService == EBTPrintingService )
+                {
+                _LIT(KText, "Printer not supported");
+                buf.Copy(KText);
+            //    resource = R_BT_PRINTING_NOT_SUPPORTED;
+                }
+            else
+                {
+                _LIT(KText, "Failed to send Data");
+                buf.Copy(KText);
+         //       resource = R_BT_FAILED_TO_SEND;
+                }
+            break;
+            }
+        case EBTSBIPSomeSend:
+        	{
+        	_LIT(KText, "Failed to send Data");
+        	 buf.Copy(KText);
+        	//resource = R_BT_FAILED_TO_SEND;
+        	break;	
+        	}    
+        case EBTSBIPOneNotSend:
+        	{
+        	_LIT(KText, "Receiving device does not support this image format.");
+        	 buf.Copy(KText);
+        	//resource = R_BT_NOT_RECEIVE_ONE;
+        	break;
+        	}
+        case EBTSBIPNoneSend:
+        	{
+        	_LIT(KText, "Receiving device does not support the needed image formats.");
+        	 buf.Copy(KText);
+        	//resource = R_BT_NOT_RECEIVE_ANY;
+        	break;
+        	}	
+        default:
+            {            
+           // resource = R_BT_DEV_NOT_AVAIL;
+            _LIT(KText, "Cannot establish Bluetooth connection");
+            buf.Copy(KText);
+            break;
+            }
+        }        
+    
+//	TRAP_IGNORE(TObexUtilsUiLayer::ShowInformationNoteL( resource ) );	
+//    CHbDeviceMessageBoxSymbian::InformationL(buf);
+      TRAP_IGNORE(CHbDeviceNotificationDialogSymbian::NotificationL(KNullDesC, buf, KNullDesC));
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ShowNote() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::LaunchConfirmationQuery
+// -----------------------------------------------------------------------------
+//
+TInt CBTServiceStarter::LaunchConfirmationQuery(TInt /*aResourceId*/)
+	{
+	TInt keypress=0;
+//	TRAP_IGNORE( keypress = iDialog->LaunchQueryDialogL(  aResourceId ));	
+	if ( !keypress )
+		{
+		FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchConfirmationQuery(), cancelled by user"));
+		DialogDismissed(EAknSoftkeyNo);
+		CancelWaitNote();		
+		}   		
+	return keypress;
+	}
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::StopTransfer
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::StopTransfer(TInt aError)
+	{
+      
+	FLOG(_L("[BTSU]\t CBTServiceStarter::StopTransfer()"));
+    Cancel();
+	if( !iUserCancel )
+	    {
+	    CancelWaitNote();
+        CancelProgressNote();
+	
+        if ( aError != KErrCancel )
+            {
+            ShowNote( aError );
+            }     
+        }
+    if ( iMessageServerIndex != 0 )
+        {                 
+        TRAPD( notUsedRetVal, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ) );
+        notUsedRetVal=notUsedRetVal;
+        iMessageServerIndex=0;
+        FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter::StopTransfer() delete ob entry %d"), notUsedRetVal ) );
+        }
+    // Release resources
+    //
+    if ( iList )
+        {
+        delete iList;
+        iList = NULL;    
+        }
+        
+    if ( iController )
+        {
+        delete iController; 
+        iController = NULL;
+        }
+    
+    if ( iNotifier.Handle() )
+        {
+        iNotifier.Close();
+        }
+
+    // Reset states
+    //
+    iServiceStarted = EFalse;
+    if ( iWaiter && iWaiter->IsStarted() )
+        {                
+        iWaiter->AsyncStop();                    
+        }    
+        
+    iState = EBTSStarterStoppingService;	    
+	}
+	
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ConnectTimedOut()
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::ConnectTimedOut()
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ConnectTimedOut()"));            
+    StopTransfer(EBTSConnectingFailed);    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ConnectTimedOut() completed"));
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ServiceSearchComplete()
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::ServiceSearchComplete( const RSdpRecHandleArray& /*aResult*/, 
+                                         TUint /*aTotalRecordsCount*/, TInt /*aErr */)
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceSearchComplete()"));        
+    }
+
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::AttributeSearchComplete()
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::AttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
+                                           const RSdpResultArray& /*aAttr*/, 
+                                           TInt /*aErr*/ )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::AttributeSearchComplete()"));           
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::ServiceAttributeSearchComplete()
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
+                                                          const RSdpResultArray& aAttr, 
+                                                          TInt aErr )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceAttributeSearchComplete()"));               
+    TInt err = KErrNone;
+    if (aErr==KErrEof && aAttr.Count()>0 )
+        {            
+        RSdpResultArray results=aAttr;    
+        iBTEngDiscovery->ParseRfcommChannel(results,iClientChannel);          
+
+        iBTEngDiscovery->CancelRemoteSdpQuery();
+               
+        switch (iState)
+            {
+            case EBTSStarterFindingBIP:
+                {
+                TRAP(err, StartProfileL( EBTSBIP ));  
+                iTriedBIP = ETrue;
+                if (err != KErrNone)
+                    {
+                    StopTransfer(EBTSConnectingFailed);        
+                    }
+                if ( iSendToBIPOnlyDevice )
+                    {
+                    iAllSend = ETrue;
+                    }
+                else
+                    {
+                    if(iList->ObjectCount() == 0)
+                        {
+                        iAllSend=ETrue;
+                        }
+                    }
+                break;
+                }
+            case EBTSStarterFindingOPP:
+                {
+                TRAP(err, StartProfileL( EBTSOPP ) ); 
+                iTriedOPP = ETrue;
+                if (err != KErrNone)
+                    {
+                    StopTransfer(EBTSConnectingFailed);        
+                    }
+                iAllSend=ETrue;  
+                break;
+                }            
+            case EBTSStarterFindingBPP:          
+                {
+                TRAP(err, StartProfileL( EBTSBPP ));           
+                if (err != KErrNone)
+                    {
+                    StopTransfer(EBTSConnectingFailed);        
+                    }               
+                break;    
+                }            
+            }       
+        }      
+    else if ( aErr==KErrEof && aAttr.Count()==0 && 
+              iState == EBTSStarterFindingBIP && !iTriedBIP )
+        {
+        iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),TUUID(KBTServiceOPPSending));
+        iState = EBTSStarterFindingOPP;    
+		iTriedBIP = ETrue;
+        }    
+    else if ( aErr==KErrEof && aAttr.Count()==0 &&
+              iState == EBTSStarterFindingOPP && !iTriedOPP &&
+              iList->ImageCount() > 0 &&
+              FeatureManager::FeatureSupported( KFeatureIdBtImagingProfile ) )
+        {
+        iSendToBIPOnlyDevice = ETrue;
+        iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),TUUID(KBTServiceImagingResponder));
+        iState = EBTSStarterFindingBIP;  
+        iTriedOPP = ETrue;
+        }
+    else
+        {
+        delete iBTEngDiscovery;
+        iBTEngDiscovery = NULL;    
+        StopTransfer(EBTSConnectingFailed);    
+        }    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceAttributeSearchComplete() done"));               
+    }
+// -----------------------------------------------------------------------------
+// CBTServiceStarter::DeviceSearchComplete()
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::DeviceSearchComplete( CBTDevice* /*aDevice*/, TInt aErr )
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::DeviceSearchComplete()"));          
+    FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter DeviceSearchComplete()aErr = %d"), aErr) );     
+    if ( aErr == KErrNone )
+        {    
+        TRAPD(err, StartProfileSelectL( iService ));
+        if (err != KErrNone )
+            {
+            StopTransfer(err);            
+            }
+            
+        iServiceStarted = ETrue;
+        }
+    else
+        {
+        if ( aErr == KErrCancel )
+            {
+            iUserCancel=ETrue;
+            }
+        StopTransfer(aErr);    
+        }    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::DeviceSearchComplete() done"));                   
+    }        
+
+// -----------------------------------------------------------------------------
+// From class MBTEngSettingsObserver.
+// Power has changed, start searching for BT devices.
+// -----------------------------------------------------------------------------
+//  
+void CBTServiceStarter::PowerStateChanged( TBTPowerStateValue aState )
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::PowerStateChanged()"));	
+    if( aState == EBTPowerOn && iWaitingForBTPower )
+        {
+        iWaitingForBTPower = EFalse;
+        TRAP_IGNORE( StartDiscoveryL() );
+        }
+	FLOG(_L("[BTSU]\t CBTServiceStarter::PowerStateChanged() - completed"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// From class MBTEngSettingsObserver.
+// Visibility has changed, ignore event.
+// -----------------------------------------------------------------------------
+//  
+void CBTServiceStarter::VisibilityModeChanged( TBTVisibilityMode aState )
+    {
+    (void) aState;
+    }
+
+// -----------------------------------------------------------------------------
+// Check if the phone is in offline mode, and ask the user if it is.
+// -----------------------------------------------------------------------------
+//  
+TBool CBTServiceStarter::CheckOfflineModeL()
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::CheckOfflineModeL()"));	
+    TCoreAppUIsNetworkConnectionAllowed offline = ECoreAppUIsNetworkConnectionNotAllowed;
+    TBTEnabledInOfflineMode offlineAllowed = EBTDisabledInOfflineMode;
+    User::LeaveIfError( iBTEngSettings->GetOfflineModeSettings( offline, offlineAllowed ) );
+    if( offline == ECoreAppUIsNetworkConnectionNotAllowed && 
+         offlineAllowed == EBTEnabledInOfflineMode )
+        {
+        User::LeaveIfError( iNotifier.Connect() );
+        TBTGenericQueryNotiferParamsPckg pckg;
+        pckg().iMessageType = EBTActivateOffLineQuery;
+        pckg().iNameExists = EFalse;
+        iActiveNotifier = EOfflineQuery;
+        iNotifier.StartNotifierAndGetResponse( iStatus, KBTGenericQueryNotifierUid, 
+                                                pckg, iOffline );
+        SetActive();
+        }
+    else if( offline == ECoreAppUIsNetworkConnectionNotAllowed && 
+            offlineAllowed == EBTDisabledInOfflineMode )
+           {
+           StopTransfer( KErrNotSupported );
+           }
+	FLOG(_L("[BTSU]\t CBTServiceStarter::CheckOfflineModeL() - completed"));
+    return ( offline == ECoreAppUIsNetworkConnectionNotAllowed );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Start BT device discovery.
+// -----------------------------------------------------------------------------
+//	
+void CBTServiceStarter::StartDiscoveryL()
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::StartDiscoveryL()"));	
+    if( !iBTEngDiscovery )
+        {
+        iBTEngDiscovery = CBTEngDiscovery::NewL(this);
+        }
+    TInt err = iBTEngDiscovery->SearchRemoteDevice(iDevice );
+    if( err )
+        {
+        StopTransfer( err );
+        }
+	FLOG(_L("[BTSU]\t CBTServiceStarter::StartDiscoveryL() - completed"));		
+    }
+
+
+// -----------------------------------------------------------------------------
+// Turn BT on and start BT device discovery if possible.
+// -----------------------------------------------------------------------------
+//  
+void CBTServiceStarter::TurnBTPowerOnL( const TBTPowerStateValue aState )
+    {
+	FLOG( _L("[BTSU]\t CBTServiceStarter::TurnBTPowerOnL()") );
+//    if (iName() != EFalse) 
+    	{
+    	if( !iBTEngSettings )
+	        {
+	        iBTEngSettings = CBTEngSettings::NewL( this );
+	        }
+	    TInt err = iBTEngSettings->ChangePowerStateTemporarily();
+	    iWaitingForBTPower = ETrue;
+	    if( err )
+	        {
+	        iWaitingForBTPower = EFalse;
+	        StopTransfer( err );
+	        }
+	    else if( aState == EBTPowerOn )
+	        {
+	        // Power is already on, we just registered for turning it off if needed.
+	        // Since there is no callback at this point (power is already on), start 
+	        // searching straight away.
+	        iWaitingForBTPower = EFalse;
+	        StartDiscoveryL();
+	        }
+    	}
+ /*   else
+    	{
+        if ( !iNotifier.Handle() )
+	        {
+			User::LeaveIfError( iNotifier.Connect() );
+	        }
+		TBTGenericQueryNotiferParamsPckg pckg;
+        pckg().iMessageType = EBTNameQuery;
+        pckg().iNameExists = EFalse;
+        iActiveNotifier = ENameQuery;
+        iNotifier.StartNotifierAndGetResponse( iStatus, KBTGenericQueryNotifierUid, 
+                                                  pckg, iName );
+        SetActive();
+    	}*/
+	FLOG(_L("[BTSU]\t CBTServiceStarter::TurnBTPowerOnL() - completed"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Called by the active scheduler when the request has been cancelled.
+// ---------------------------------------------------------------------------
+//
+void CBTServiceStarter::DoCancel()
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::DoCancel()"));
+    iNotifier.CancelNotifier( KBTGenericQueryNotifierUid );
+    iNotifier.Close();
+	FLOG(_L("[BTSU]\t CBTServiceStarter::DoCancel() - completed"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Called by the active scheduler when the request has been completed.
+// ---------------------------------------------------------------------------
+//
+void CBTServiceStarter::RunL()
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::RunL()"));
+    TInt err = iStatus.Int();
+    if( !err )
+        {
+        if ( (iActiveNotifier == ENameQuery && iName() != EFalse ) || ( iActiveNotifier == EOfflineQuery && iOffline() != EFalse ) )
+            {
+            TBTPowerStateValue power = EBTPowerOff;
+            if ( iNotifier.Handle() )
+                {
+                iNotifier.Close();
+                }
+            User::LeaveIfError( iBTEngSettings->GetPowerState( power ) );
+            TurnBTPowerOnL( power );
+            }
+        else
+            {
+            err = KErrCancel;
+            }    
+        }
+
+    if( err )
+        {
+      
+        err = ( err == KErrNotSupported ? KErrCancel : err );
+        if ( iWaiter && err != KErrInUse && err != KErrCancel )
+            {
+            err = EBTSPuttingFailed;
+            }
+        StopTransfer( err );
+        }
+    
+    FLOG(_L("[BTSU]\t CBTServiceStarter::RunL() - completed"));	
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Called by the active scheduler when an error in RunL has occurred.
+// ---------------------------------------------------------------------------
+//
+TInt CBTServiceStarter::RunError( TInt aError )
+    {
+	FLOG(_L("[BTSU]\t CBTServiceStarter::RunError()"));
+    StopTransfer( aError );
+	FLOG(_L("[BTSU]\t CBTServiceStarter::RunError() - completed"));
+    return KErrNone;
+    }
+
+
+
+
+void CBTServiceStarter::ProgressDialogCancelled(const CHbDeviceProgressDialogSymbian*/*  aDialog*/)
+    {
+    FLOG(_L("[BTSU]\t CBTServiceStarter::ProgressDialogCancelled(), cancelled by user"));        
+    iUserCancel=ETrue;
+    if ( iController )
+        {
+        iController->Abort();
+        }
+    else 
+       {
+       StopTransfer(KErrCancel);
+       }    
+    }
+
+
+void CBTServiceStarter::ProgressDialogClosed(const CHbDeviceProgressDialogSymbian* /* aDialog*/)
+    {
+    }
+
+
+void CBTServiceStarter::DataReceived(CHbSymbianVariantMap& /*aData*/)
+    {
+    
+    }
+
+
+void CBTServiceStarter::DeviceDialogClosed(TInt /* aCompletionCode*/)
+    {
+    TBuf<255> buf;
+    _LIT(KText, "Sending Cancelled to ");
+    buf.Copy(KText);
+    if ( iDevice->IsValidFriendlyName() )
+        {
+        buf.Append( iDevice->FriendlyName() );
+        }
+    else 
+        {
+        TRAP_IGNORE(buf.Append( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())));
+        }
+
+    iUserCancel=ETrue;
+    if ( iController )
+        {
+        iController->Abort();
+        }
+    else 
+       {
+       StopTransfer(KErrCancel);
+       }    
+    
+    if ( iProgressTimer )
+        {
+        iProgressTimer->Cancel();
+        delete iProgressTimer;
+        iProgressTimer = NULL;
+        }
+    TRAP_IGNORE(CHbDeviceNotificationDialogSymbian::NotificationL(KNullDesC, buf, KNullDesC));
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceUtils.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 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:  Contains BTSU wide definitions.
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+
+// CONSTANTS
+
+// ============================= LOCAL FUNCTIONS ===============================
+//
+
+// -----------------------------------------------------------------------------
+// BTSUPanic
+// Issues a Panic using the panic codes and name defined by this subsystem.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void BTSUPanic( TBTSUPanicCode aPanic )
+    {
+    User::Panic( KBTSUModuleName, aPanic );
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexsendservices/rom/obexservicesendutils.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2004 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 BtServiceUtils
+*
+*/
+
+
+#ifndef BTSERVICEUTILS_IBY
+#define BTSERVICEUTILS_IBY
+
+#ifdef __BT
+file=ABI_DIR\BUILD_DIR\obexservicesendutils.dll         SHARED_LIB_DIR\obexservicesendutils.dll
+#endif
+#endif // BTSERVICEUTILS_IBY
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/BWINS/obexusbapiU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	?CancelManageUSBServices@CObexUSB@@QAEXXZ @ 1 NONAME ; void CObexUSB::CancelManageUSBServices(void)
+	?ManageUSBServices@CObexUSB@@QAEXHAAVTRequestStatus@@@Z @ 2 NONAME ; void CObexUSB::ManageUSBServices(int, class TRequestStatus &)
+	?NewL@CObexUSB@@SAPAV1@XZ @ 3 NONAME ; class CObexUSB * CObexUSB::NewL(void)
+
Binary file btobexprofiles/obexserviceman/cenrep/keys_obexserviceman.xls has changed
Binary file btobexprofiles/obexserviceman/conf/obexserviceman.confml has changed
Binary file btobexprofiles/obexserviceman/conf/obexserviceman_20016BC5.crml has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/eabi/obexusbapiu.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN8CObexUSB17ManageUSBServicesEiR14TRequestStatus @ 1 NONAME
+	_ZN8CObexUSB23CancelManageUSBServicesEv @ 2 NONAME
+	_ZN8CObexUSB4NewLEv @ 3 NONAME
+	_ZTI8CObexUSB @ 4 NONAME ; #<TI>#
+	_ZTV8CObexUSB @ 5 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/group/backup_registration.xml	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,7 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration>
+    <proxy_data_manager sid = "0x10202BE9" />
+    <dbms_backup policy="0x101F7C87" /> 
+    <restore requires_reboot = "no"/>
+</backup_registration>
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a ?module_name.
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+
+PRJ_MMPFILES
+
+../group/obexserviceman.mmp
+../group/obexservicemanclient.mmp
+../group/obexusbapi.mmp
+
+PRJ_EXPORTS
+
+../conf/obexserviceman.confml			MW_LAYER_CONFML(obexserviceman.confml)
+../conf/obexserviceman_20016BC5.crml	MW_LAYER_CRML(obexserviceman_20016BC5.crml)
+
+../obexservicemanserver/inc/obexservicemanprop.h			MW_LAYER_PLATFORM_EXPORT_PATH(obexservicemanprop.h)
+
+// Backup registration file
+backup_registration.xml  /epoc32/data/z/private/101f7c87/backup_registration.xml
+backup_registration.xml  /epoc32/release/winscw/udeb/z/private/101f7c87/backup_registration.xml
+backup_registration.xml  /epoc32/release/winscw/urel/z/private/101f7c87/backup_registration.xml
+
+
+../rom/obex.iby                                 /epoc32/rom/include/obex.iby
+../rom/obex.iby                                 CORE_MW_LAYER_IBY_EXPORT_PATH(obex.iby)
+../rom/obexserviceman.iby                       CORE_MW_LAYER_IBY_EXPORT_PATH(obexserviceman.iby)
+../rom/obexservicemanbt.iby                     CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicemanbt.iby)
+../rom/obexservicemanirda.iby                   CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicemanirda.iby)
+../rom/obexservicemanusb.iby                    CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicemanusb.iby)
+../rom/ObexUtils.iby                            CORE_MW_LAYER_IBY_EXPORT_PATH(ObexUtils.iby)
+../rom/ObexUtilsResources.iby                   LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(ObexUtilsResources.iby)
+
+
+#include  "../utils/group/bld.inf"
+
+#include "../plugins/group/bld.inf"
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/group/obexserviceman.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 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: 
+*     This is project specification file for the SRCS.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET        obexserviceman.exe
+TARGETTYPE    EXE
+
+
+
+
+UID		0x1000008d 0x101F7C87
+CAPABILITY	CAP_SERVER CommDD NetworkControl LocalServices
+VENDORID	VID_DEFAULT
+
+EPOCHEAPSIZE  0x500 0x800000
+
+EPOCSTACKSIZE  0x4000
+
+SOURCEPATH    ../obexservicemanserver/src
+SOURCE        obexsmmain.cpp
+SOURCE        obexsm.cpp 
+SOURCE        SrcsSession.cpp
+SOURCE        SrcsServiceManager.cpp
+SOURCE        SrcsMessage.cpp
+
+
+
+
+USERINCLUDE   ../obexservicemanserver/inc
+SYSTEMINCLUDE  ../../inc ../../../inc  /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY       euser.lib             // Kernel API
+LIBRARY       ecom.lib
+LIBRARY				obex.lib
+LIBRARY       obexutils.lib
+LIBRARY       btfeatures.lib
+DEBUGLIBRARY     flogger.lib       // File logging
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/group/obexservicemanclient.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2002 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: 
+*     SRCS client side API project file.
+*     
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+TARGET          obexserviceman.dll
+TARGETTYPE      PLUGIN
+                             
+UID             0x10009D8D 0x20002776
+CAPABILITY	CAP_ECOM_PLUGIN
+VENDORID	VID_DEFAULT
+
+START RESOURCE          ../obexservicemanclient/data/0x101F7C88.rss
+  TARGET                obexserviceman.rsc
+END // RESOURCE
+
+SOURCEPATH  ../obexservicemanclient/src
+
+SOURCE      ObexSMClient.cpp
+SOURCE      ObexSMPlugin.cpp
+SOURCE      ObexSMProxy.cpp
+SOURCE      ObexSMRequester.cpp
+
+USERINCLUDE     ../obexservicemanclient/inc
+SYSTEMINCLUDE  ../../inc ../../../inc /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY     euser.lib         // Kernel API
+LIBRARY     ecom.lib
+DEBUGLIBRARY     flogger.lib       // File logging
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/group/obexusbapi.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     
+*     
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+TARGET          obexusbapi.dll
+TARGETTYPE      DLL
+                             
+UID             0x1000008D 0x1020896D
+CAPABILITY	CAP_GENERAL_DLL CommDD NetworkControl LocalServices
+VENDORID	VID_DEFAULT
+
+
+SOURCEPATH  ../obexservicemanclient/src
+
+SOURCE      ObexSMClient.cpp
+SOURCE      usbobex.cpp
+SOURCE      usbclientwrapper.cpp
+
+USERINCLUDE     ../obexservicemanclient/inc
+SYSTEMINCLUDE  ../../inc ../../../inc /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY          euser.lib         // Kernel API
+DEBUGLIBRARY     flogger.lib       // File logging
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/inc/obexservicemanprivatecrkeys.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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:  Obex Service Manager private central repository key definitions.
+*
+*/
+
+
+#ifndef OBEXSERVICEMAN_PRIVATE_CR_KEYS_H
+#define OBEXSERVICEMAN_PRIVATE_CR_KEYS_H
+
+
+/**  Obex Service Manager configuration CenRep UID */
+const TUid KCRUidObexServiceMan = { 0x20016BC5 };
+
+
+/**
+ * CenRep key for storing Obex USB DMA usage settings.
+ *
+ * Possible integer values:
+ * 0 USB DMA is not in use
+ * 1 USB DMA is in use
+ *
+ * Default value: 1
+ *
+ */
+const TUint32 KObexUsbDmaUsage =	0x00000001;
+
+/**  Enumeration for obex usb dma usage*/
+enum TObexUsbDmaUsage
+    {
+    EObexUsbDmaNotInUse = 0,
+    EObexUsbDmaInUse = 1
+    };
+
+#endif // OBEXSERVICEMAN_PRIVATE_CR_KEYS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/data/0x101F7C88.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* 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:  Resource definitions for project ?myapp
+*
+*/
+
+
+#include "registryinfov2.rh"
+#include "locodplugin.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+	{
+    // resource_format_version must always be set as follows
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+	
+	// UID for the DLL
+	dll_uid = 0x20002776;
+	          
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = KLOCODSERVICEINTERFACEUID;
+			implementations = 
+				{
+				// Info for CDunPlugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = KFeatureIdSrcs ;
+					version_no = 1;
+					display_name = "ObexService Plugin";
+					default_data = "";
+					opaque_data = "";
+					
+					// This implementation CANNOT be overridden by a RAM-based plug-in
+                    rom_only = 1;
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/ObexSMPlugin.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* 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:  This is the ObexServiceManager ecom plugin class declaration.
+*
+*/
+
+
+#ifndef OBEXSERVICEMANPLUGIN_H
+#define OBEXSERVICEMANPLUGIN_H
+
+#include <e32base.h>
+
+#include <locodserviceplugin.h>
+#include <locodservicepluginparams.h>
+#include <locodbearer.h>
+
+
+#include "obexsmclient.h"  
+
+ 
+class CObexSMRequester; 
+class RObexSMServer;
+ 
+class MObexSMRequestObserver
+    {
+public:    
+    /**
+     * Tell service plugin that request has been completed.     
+     *  
+     * @since S60 v3.2
+     * @param  aBearer a Request to be completed
+     * @param  aError  Error code   
+     */
+    virtual void RequestComplete(CObexSMRequester* aRequest, TInt err) = 0;        
+    
+    /**
+     * Get Obexservicemanager server interface
+     *      
+     * @since S60 v3.2
+     * @return  Client handle.
+     */
+    virtual RObexSMServer& GetServer()=0; 
+    
+    };
+    
+ 
+    
+/**
+ *  ObexServiceManPlugin class
+ *
+ *  This is the ObexServiceMan ecom plugin class  
+ *  @lib ?library
+ *  @since S60 v3.2
+ */
+class CObexSMPlugin : public CLocodServicePlugin, public MObexSMRequestObserver
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aParams the LocodServicePluginParams     
+     */
+    static CObexSMPlugin* NewL(TLocodServicePluginParams& aParams);
+
+    /**
+     * Destructor.
+     */    
+    ~CObexSMPlugin();
+
+    /**
+     * Tell service plugin which service should be enabled or disabled according to
+     * specified bearer and its status.     
+     * @since S60 v3.2
+     * @param  aBearer the bearer identification 
+     * @param  aStatus the status of this bearer, ETrue if it is available;
+     *                 EFalse otherwise.
+     */
+    void ManageService(TLocodBearer aBearer, TBool aStatus);
+    
+    /**
+     * Tell service plugin that request has been completed.     
+     * @since S60 v3.2
+     * @param  aRequest the Request to be completed.     
+     * @param  aError  Error code   
+     */
+    void RequestComplete(CObexSMRequester* aRequest, TInt aError);
+    
+    /**
+     * Get Obexservicemanager server interface     
+     * @since S60 v3.2
+     * @return  Client handle.
+     */
+    RObexSMServer&   GetServer();
+    
+private:
+
+    CObexSMPlugin(TLocodServicePluginParams& aParams);
+    void ConstructL();
+    
+private: // data 
+    RObexSMServer                   iObexSMServer;
+    RPointerArray<CObexSMRequester> iRequests;
+    };
+
+
+
+#endif // OBEXSERVICEMANPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/ObexSMRequester.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2006-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:  obexservicemanager client request class
+*
+*/
+
+
+#ifndef OBEXSMREQUESTER_H
+#define OBEXSMREQUESTER_H
+
+#include <locodservicepluginobserver.h>
+
+#include <e32def.h>
+#include "ObexSMPlugin.h"
+
+class MObexSMRequestObserver;
+
+
+/**
+ *  Active object request class
+ *
+ *  Its instance will be used to control Asynchronous request
+ *  from ECom plugin to obex service manager server
+ *
+ *  @lib obexserviceman.lib
+ *  @since S60 3.2
+ */
+NONSHARABLE_CLASS(CObexSMRequester) : public CActive
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver the request completing observer
+     * @param aBearer the bearer identification
+     * @param aBearStatus the status of this bearer, ETrue
+                 if it is available EFalse otherwise.
+     */
+    static CObexSMRequester* NewL(MObexSMRequestObserver* aObserver,
+                                TLocodBearer aBearer, TBool aBearStatus); 
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver the request completing observer
+     * @param aBearer the bearer identification
+     * @param aBearStatus the status of this bearer, ETrue
+                 if it is available EFalse otherwise.
+     */
+    static CObexSMRequester* NewLC(MObexSMRequestObserver* aObserver,
+                                TLocodBearer aBearer, TBool aBearStatus); 
+    /**
+     * Destructor.
+     */
+    virtual ~CObexSMRequester();
+
+    /**
+     * Request function   
+     *   
+     * @since S60 3.2     
+     */
+    void ActivateRequest();
+    /**
+     * Get Request Status     
+     *
+     * @since S60 3.2    
+     * @return the requested status 
+     */
+    TBool GetStatus();
+    
+    /**
+     * Get the requested bearer
+     *
+     * @since S60 3.2    
+     * @return the requested bearer
+     */
+    TLocodBearer GetBearer();
+
+protected:
+
+    // from base class CActive
+    /**
+     * From CActive. 
+     * Cancel current activity.
+     *
+     * @since S60 3.2     
+     */
+    void DoCancel();
+
+    /**
+     * From CActive. 
+     * Called when read or write operation is ready.
+     *
+     * @since S60 3.2     
+     */
+    void RunL();
+
+    /**
+     * From CActive. 
+     * Called if RunL() leaves. Retry listening after error.
+     *
+     * @since S60 3.x
+     * @param aError the error code
+     */
+    TInt RunError( TInt aError );
+
+private:
+
+
+    CObexSMRequester(MObexSMRequestObserver* aObserver, TLocodBearer aBearer, TBool aBearStatus);
+
+    void ConstructL();
+
+private: // data    
+
+    MObexSMRequestObserver* iObserver;
+    TLocodBearer            iBearer;
+    TBool                   iBearStatus; 
+    };
+
+
+#endif //  OBEXSMREQUESTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,175 @@
+/*
+* 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:  Logging definition
+*
+*/
+
+
+#ifndef PRJ_LOGGING_H
+#define PRJ_LOGGING_H
+
+#include "debugconfig.h"
+
+#ifdef PRJ_ENABLE_TRACE
+
+#ifdef PRJ_FILE_TRACE
+#include <flogger.h>
+#else
+#include <e32debug.h>
+#endif
+
+const TInt KMaxLogLineLength = 512;
+
+#define KPRINTERROR        0x00000001 // Tracing level: error
+#define KPRINTINFO        0x00000002 // Tracing level: function trace
+#define KPRINTSTATE        0x00000004 // Tracing level: state machine info
+#define KPRINTWARNING   0x00000008 // Tracing level: warning
+
+const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING;
+
+NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
+    {
+public:
+    void Overflow(TDes16& /*aDes*/) {}
+    };
+
+NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
+    {
+public:
+    void Overflow(TDes8& /*aDes*/) {}
+    };
+
+inline void Trace(TRefByValue<const TDesC16> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TBuf16<KMaxLogLineLength> theFinalString;
+    theFinalString.Append(KTracePrefix16);
+    TOverflowTruncate16 overflow;
+    theFinalString.AppendFormatList(aFmt,list,&overflow);
+    RDebug::Print(theFinalString);
+#endif
+    }
+
+inline void Trace(TRefByValue<const TDesC8> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list, aFmt);
+#ifdef PRJ_FILE_TRACE
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+#else
+    TOverflowTruncate8 overflow;
+    TBuf8<KMaxLogLineLength> buf8;
+    buf8.Append(KTracePrefix8);
+    buf8.AppendFormatList(aFmt, list, &overflow);
+    TBuf16<KMaxLogLineLength> buf16(buf8.Length());
+    buf16.Copy(buf8);
+    TRefByValue<const TDesC> tmpFmt(_L("%S"));
+    RDebug::Print(tmpFmt, &buf16);
+#endif
+    }
+
+inline void TracePanic(
+    char* aFile, 
+    TInt aLine,
+    TInt aPanicCode,
+    const TDesC& aPanicCategory)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KPanicPrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName);
+    Trace(buf);
+    User::Panic(aPanicCategory, aPanicCode); 
+    }
+
+inline void TraceLeave(char* aFile, TInt aLine, TInt aReason)
+    {
+    TPtrC8 fullFileName((const TUint8*)aFile);
+    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
+    TBuf8<KMaxLogLineLength> buf;
+    buf.Append(KLeavePrefix8);
+    buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName);
+    Trace(buf);
+    User::LeaveIfError(aReason);
+    }
+
+#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;}
+
+#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;}
+
+#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;}
+
+#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;}
+
+#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;}
+
+#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);}
+
+#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory)
+
+#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);}
+
+#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}}
+
+#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}}
+
+#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}}
+
+#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}}
+
+#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}}
+
+#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}}
+
+#else // PRJ_ENABLE_TRACE not defined
+
+#define TRACE_INFO(p)
+
+#define TRACE_ERROR(p)
+
+#define TRACE_STATE(p)
+
+#define TRACE_WARNING(p)
+
+#define TRACE_INFO_SEG(p)
+
+#define TRACE_ASSERT(GUARD, CODE)
+
+#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);}
+
+#define LEAVE_IF_ERROR(REASON) {static_cast<void>(User::LeaveIfError(REASON));}
+
+#define LEAVE(REASON) {static_cast<void>(User::Leave(REASON));}
+
+#define TRACE_FUNC_ENTRY
+
+#define TRACE_FUNC_ENTRY_THIS
+
+#define TRACE_FUNC_EXIT
+
+#define TRACE_FUNC
+
+#define TRACE_FUNC_THIS
+
+#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;}
+#endif // PRJ_ENABLE_TRACE
+
+#endif // PRJ_LOGGING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/debugconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_DEBUGCONFIG_H
+#define OBEXSM_DEBUGCONFIG_H
+
+#include "prjconfig.h"
+
+
+/**
+ * Custom logging variations.
+ */
+#ifdef PRJ_FILE_TRACE
+_LIT(KLogFile,"obexservicemanclient.txt");
+_LIT(KLogDir,"locod");
+#endif
+
+#ifdef PRJ_ENABLE_TRACE
+_LIT(KTracePrefix16, "[ObexSM] ");
+_LIT8(KTracePrefix8, "[ObexSM] ");
+_LIT8(KFuncFormat8, "><%S");
+_LIT8(KFuncThisFormat8, "><%S, [0x%08X]");
+_LIT8(KFuncEntryFormat8, ">%S");
+_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]");
+_LIT8(KFuncExitFormat8, "<%S");
+
+_LIT(KPanicCategory, "ObexSM");    
+_LIT8(KPanicPrefix8, "PANIC code ");
+_LIT8(KLeavePrefix8, "LEAVE code ");
+#endif
+
+#endif // OBEXSM_DEBUGCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/obexsmclient.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2006-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:  obexservicemanager client class definition
+*
+*/
+
+
+#ifndef OBEXSMCLIENT_H
+#define OBEXSMCLIENT_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <locodbearer.h>
+#include "usbobex.h"
+
+/// server name
+_LIT(KSrcsName,"obexserviceman");
+
+// Server path
+
+_LIT(KSrcsImg,"z:\\sys\\bin\\obexserviceman.exe");
+
+// A version must be specifyed when creating a session with the server
+const TUint KSrcsMajorVersionNumber=1;
+const TUint KSrcsMinorVersionNumber=0;
+const TUint KSrcsBuildVersionNumber=1;
+
+// SRCS Server Uid
+const TUid KSrcsUid={0x101F7C87};
+
+// Opcodes used in message passing between client and server
+enum TSrcsServRequest
+{
+    ESrcsBTServicesON,
+    ESrcsBTServicesOFF,
+    ESrcsStartUSB,
+    ESrcsStopUSB,    
+    ESrcsIrDAServicesON,
+    ESrcsIrDAServicesOFF,    
+    ESrcsCancelRequest
+};
+
+
+
+
+/**
+* Client side thread starting function
+* Start the server when client tries to contact it if it is not allready running
+*/ 
+TInt StartThread();
+
+/**
+ *  The client class. An RSessionBase sends messages to the server with the function
+ *  RSessionBase::SendReceive(); specifying an opcode and and array of argument pointers.
+ *  Functions in derived classes, such as RSrcs::InitialiseServices(), are wrappers for different calls to
+ *  SendReceive().
+ */
+NONSHARABLE_CLASS (RObexSMServer): public RSessionBase
+    {
+public:  // Constructor
+
+    /**
+    * C++ default constructor.
+    */
+    RObexSMServer();
+
+public:     
+    
+   /**
+    * Turns BT services ON/OFF depending on given parameter.
+    *
+    * @since S60 v3.2
+    * @param    TBool aState Boolean value to toggle services.
+    * @return   TInt indicating the success of call.
+    */
+    TInt ManageServices(TLocodBearer aBearer, TBool aBearStatus,TRequestStatus &aStatus );
+                                   
+
+public: // Functions from base classes
+
+   /**
+    * From RSessionBase informs current version    
+    *
+    * @since S60 v3.2
+    * @return   Version information about the server
+    */
+    TVersion Version() const;
+
+   /**
+    * From RSessionBase connect to the server   
+    *
+    * @since S60 v3.2    
+    */
+    TInt Connect();
+    
+   /**
+    * Cancel pending request
+    *
+    * @since S60 v3.2       
+    */ 
+    void CancelRequest();   
+    
+
+private:    // Data
+
+    RProcess iProses;
+    };
+
+
+#endif  // OBEXSMCLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/prjconfig.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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:  Project configure file.
+*
+*/
+
+
+#ifndef OBEXSM_PRJCONFIG_H
+#define OBEXSM_PRJCONFIG_H
+
+/**
+ * Traces are enabled via RDebug::Print() in UDEB build, by default.
+ */
+#ifdef _DEBUG
+#define PRJ_ENABLE_TRACE
+#endif
+
+/**
+ * Traces will be written to file if this is defined.
+ */
+//#define PRJ_FILE_TRACE
+
+
+/**
+ * build the project for module test purpose if this is defined
+ */
+//#define PRJ_MODULETEST_BUILD
+
+/**
+ * build the project using stubs to replace the dependencies if this is defined
+ */
+//#define PRJ_USE_STUB
+
+#endif // OBEXSM_PRJCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/usbclientwrapper.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2007-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:  Obexserviceman client handling for usbobex api
+*
+*/
+
+
+
+#ifndef CUSBCLIENTWRAPPER_H
+#define CUSBCLIENTWRAPPER_H
+
+
+#include <e32base.h>
+#include "obexsmclient.h"
+
+
+/**
+ *   Obexserviceman client handling for usbobex api
+ * 
+ * 
+ *  @since S60 S60 v3.2
+ */
+NONSHARABLE_CLASS (CUSBClientWrapper) : public CBase
+    {
+
+
+public:
+
+    static CUSBClientWrapper* NewL();          
+
+    /**
+    * Destructor.
+    */
+    virtual ~CUSBClientWrapper();
+
+    /**
+     * Turn USB services on or off
+     *
+     * @since S60 v3.2
+     * @param aUSBStatus the requested USB service status
+     * @param aStatus the Request status
+     * @return None
+     */
+     void  ManageUSBServices(TBool aUSBStatus, TRequestStatus &aStatus);     
+    
+    /**
+     * Cancel managment request and turn services off   
+     * @since S60 v3.2
+     *
+     */
+    void  CancelManageUSBServices();        
+
+private:
+
+
+    CUSBClientWrapper();
+
+    void ConstructL();
+    
+private: // data
+
+    /**
+     * ObexServer Manager client 
+     */
+    RObexSMServer iServer; 
+
+    };
+#endif //   CUSBCLIENTWRAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/usbobex.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2006-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:  USB obexservicemanager client definition
+*
+*/
+
+
+#ifndef USBOBEX_H
+#define USBOBEX_H
+
+#include <e32base.h>
+
+
+class CUSBClientWrapper;
+
+
+/**
+*	Transportation string definition
+*/
+_LIT8(KSrcsTransportBT,"OBEX/BT");
+_LIT8(KSrcsTransportUSB,"OBEX/USB");
+_LIT8(KSrcsTransportIrDA,"OBEX/IrDA");
+
+
+/**
+ *  obexservicemanager client for usb.
+ *  @lib obexusbapi.lib
+ *  @since S60 v3.2
+ */
+class CObexUSB : public CBase
+    {
+public:
+
+   /**
+    * Two-phased constructor.    
+    */
+    IMPORT_C static CObexUSB* NewL();
+        
+   /**
+    * Destructor.
+    */
+    ~CObexUSB();
+    
+   /**
+    * Turn USB services on or off
+    *
+    * @since S60 v3.2
+    * @param aUSBStatus the requested USB service status
+    * @param aStatus the Request status
+    * @return None
+    */
+    IMPORT_C void  ManageUSBServices( TBool aUSBStatus, TRequestStatus &aStatus );     
+      
+   /**
+    * Cancel managment request and turn services off   
+    * @since S60 v3.2
+    *
+    */
+    IMPORT_C void  CancelManageUSBServices();     
+
+private: 
+
+    CObexUSB();
+    void ConstructL();
+
+private: //data
+
+   /**
+    * Obexserviceman client wrapper
+    */
+    CUSBClientWrapper* iUSBWrapper;        
+    };
+#endif // USBOBEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMClient.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2006-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:  obexservicemanager client class implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexsmclient.h"
+#include <e32std.h>
+#include "debug.h"
+
+
+// CONSTANTS
+const TInt KServerConnectRetries = 2;       // How many times client tries to make connection to server
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------
+// StartThread
+//
+// Create the server thread/process depending on the framework.
+// This function is exported from the DLL and called from the client
+// RObexSMServer::Connect() -method.
+// Returns: TInt: Error Code
+//
+// ---------------------------------------------------------
+
+TInt StartThread()
+    {
+    TRACE_FUNC  
+	
+    TInt retVal = KErrNone;
+    // create server - if one of this name does not already exist
+    TFindServer findSrcs(KSrcsName);
+    TFullName name;
+
+    if ( findSrcs.Next( name ) != KErrNone ) // we don't exist already
+        {
+        TRequestStatus started;
+        //TSrcsStart start( started );
+        const TUidType serverUid( KNullUid,KNullUid,KSrcsUid );
+
+        // Then we have to create the server
+        // This depends on if we are in WINS or target HW environment.
+	
+		TRACE_INFO(_L("[SRCS]\tclient\tSrcs StartThread(): create the server"));
+        // We are on target HW or EKA2 WINS.
+        // New process has to be created for the SRCS		
+        RProcess server;        
+        retVal=server.Create(KSrcsName,             // Full path to SRCS
+                             KNullDesC,     // Descriptor of parameters
+                             serverUid);            // Triplet UID of executable
+
+        // Check the return value of process creation
+        if ( retVal != KErrNone )
+            {
+            // Loading failed.
+			TRACE_ERROR((_L("[SRCS]\tclient\tSrcs StartThread(): process creation failed %d"), retVal));
+            return retVal;
+            }
+
+		TRACE_INFO(_L("[SRCS]\tclient\tSrcs StartThread(): Process created successfully"));
+
+
+        // Process/Thread has been created
+        // Now logon to the server
+        TRequestStatus stat;
+        //server.Logon(died);
+		server.Rendezvous(stat);
+
+		if (stat!=KRequestPending)
+			{
+			server.Kill(0);		// abort startup
+			//FTRACE(FPrint(_L("c\tclient\tSrcs abort startup.\n")));
+			}
+		else
+			{
+			server.Resume();	// logon OK - start the server
+			//FTRACE(FPrint(_L("c\tclient\tSrcs Resumed.\n")));
+			}
+
+        // Then wait the start or death of the server.
+        User::WaitForRequest(stat);
+
+		// we can't use the 'exit reason' if the server panicked as this
+		// is the panic 'reason' and may be '0' which cannot be distinguished
+		// from KErrNone
+		TRACE_INFO((_L("[SRCS]\tclient\tSrcs Server started, code %d (0=>success)\n"), stat.Int()));
+		retVal=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+		
+		server.Close(); 
+        TRACE_INFO(_L("[SRCS]\tclient\tSrcs server handle closed."));
+        }
+
+    return retVal;
+    }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+RObexSMServer::RObexSMServer()
+    {
+    }
+
+
+// ---------------------------------------------------------
+// Connect
+// Handles connection to server( creates session )
+// ---------------------------------------------------------
+//
+TInt RObexSMServer::Connect()
+    {
+    TRACE_FUNC 
+
+    // IF there is allready a session handle,
+    // no other session is created.
+    if ( Handle() )
+        {
+        return KErrAlreadyExists;
+        }
+
+    // Else try to create a new session with server
+    TInt retry= KServerConnectRetries;
+
+    FOREVER
+    {
+        // Try to make session with server
+        TInt retVal=CreateSession(KSrcsName,Version());
+        TRACE_INFO((_L("[SRCS]\tclient\tRSrcs: create Session returned: %d"), retVal));
+        if ( retVal != KErrNotFound && retVal != KErrServerTerminated )
+        {
+        // Error which can't be handled happened.
+        return retVal;
+        }
+    // Decrease count
+    --retry;
+    if ( retry == 0 )
+        {
+        return retVal;
+        }
+
+    // Try to start the server
+	TRACE_INFO(_L("[SRCS]\tclient\tRSrcs::Connect(): try to start server"));
+    retVal=StartThread();
+    TRACE_INFO((_L("[SRCS]\tclient\tRSrcs: StartThread returned: %d"), retVal));
+
+    if ( retVal != KErrNone && retVal != KErrAlreadyExists )
+        {
+        // Error can't be handled.
+        return retVal;
+        }
+	}	
+	
+    }
+
+// ---------------------------------------------------------
+// Version
+// Defines server version number
+// ---------------------------------------------------------
+//
+TVersion RObexSMServer::Version() const
+    {
+    TRACE_FUNC        
+    return( TVersion( KSrcsMajorVersionNumber,
+                      KSrcsMinorVersionNumber,
+                      KSrcsBuildVersionNumber ));
+    }
+
+// ---------------------------------------------------------
+// ManageServices
+// Sends Manage services command to SRCS.
+// ---------------------------------------------------------
+//
+TInt RObexSMServer::ManageServices(TLocodBearer aBearer, TBool aBearStatus,TRequestStatus &aStatus )
+    {
+    TRACE_FUNC  
+    TInt retVal = KErrNone;
+
+    TPckgBuf<TInt> pckg;
+    TIpcArgs args( &pckg, NULL, NULL );
+    TSrcsServRequest request;
+    
+    switch(aBearer)
+        {
+        case ELocodBearerBT:
+            {
+            if(aBearStatus)
+                {
+                request=ESrcsBTServicesON;    
+                }
+            else
+                {
+                request=ESrcsBTServicesOFF;    
+                }                        
+            }
+            break;
+        case ELocodBearerIR:
+            {
+            if(aBearStatus)
+                {
+                request=ESrcsIrDAServicesON;    
+                }
+            else
+                {
+                request=ESrcsIrDAServicesOFF;    
+                }            
+            }
+            break;
+        case ELocodBearerUSB:
+            {
+            if(aBearStatus)
+                {
+                request=ESrcsStartUSB;    
+                }
+            else
+                {
+                request=ESrcsStopUSB;    
+                }                
+            }
+            break;
+        default:
+            {
+            TRACE_ERROR(_L("[SRCS]\tclient\tRSrcs Manageservice: Bad bearer"));    
+            return KErrArgument;    
+            }               
+        }    
+    if ( Handle() )
+        {                       
+        SendReceive( request, args, aStatus );        
+        }        
+    else
+        {
+        TRACE_ERROR(_L("[SRCS]\tclient\tRSrcs ManageBTServices. No Handle"));
+        retVal = KErrBadHandle;
+        }                
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CancelRequest
+// ---------------------------------------------------------
+//
+void RObexSMServer::CancelRequest()
+    {    
+    TPckgBuf<TInt> pckg;    
+    TIpcArgs args( &pckg, NULL, NULL );
+    TSrcsServRequest request;
+    request=ESrcsCancelRequest;    
+    if ( Handle() )
+        {               
+        SendReceive( request, args );                     
+        }    
+    
+    }    
+//end of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMPlugin.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,144 @@
+/*
+* 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:  This is the ObexServiceManager ecom plugin class implementation.
+*
+*/
+
+
+#include "ObexSMPlugin.h"
+#include "ObexSMRequester.h"
+#include "debug.h"
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+CObexSMPlugin* CObexSMPlugin::NewL(TLocodServicePluginParams& aParams)
+    {
+    TRACE_FUNC
+    CObexSMPlugin* self = new (ELeave) CObexSMPlugin(aParams);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+CObexSMPlugin::~CObexSMPlugin()
+    {
+    TRACE_FUNC_ENTRY      
+    iRequests.ResetAndDestroy();
+    iRequests.Close();    
+    if(iObexSMServer.Handle())
+        {              
+        iObexSMServer.Close();       
+        }    
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------------------------
+// ManageService
+// ---------------------------------------------------------------------------
+//
+void CObexSMPlugin::ManageService(TLocodBearer aBearer, TBool aStatus)
+    {
+    TRACE_FUNC_ENTRY    
+    TInt err = KErrNone; 
+    CObexSMRequester* request=NULL;
+    
+    if(!iObexSMServer.Handle())
+    	{
+       	err = iObexSMServer.Connect();              	
+    	}    
+    if(err == KErrNone &&  aBearer != ELocodBearerUSB)
+    	{    	
+    	TRAP(err, request = CObexSMRequester::NewL(this, aBearer, aStatus)); 
+    	if(err==KErrNone)
+    	    {
+            err=iRequests.Append( request );     
+            if(err==KErrNone)
+                {
+                request->ActivateRequest();               
+                }
+            }        
+    	}    
+    else if(err == KErrNone &&  aBearer == ELocodBearerUSB) 	
+        {
+        Observer().ManageServiceCompleted(aBearer,aStatus,ImplementationUid(), KErrNone); 	           
+        }
+        
+    if(err!=KErrNone)
+        {
+        Observer().ManageServiceCompleted(aBearer,aStatus,ImplementationUid(), err); 	       
+        }
+    TRACE_FUNC_EXIT    
+    }
+   
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+
+CObexSMPlugin::CObexSMPlugin(TLocodServicePluginParams& aParams)
+    : CLocodServicePlugin(aParams)
+    {	        
+	}
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CObexSMPlugin::ConstructL()
+    {    
+    TRACE_FUNC    
+    }
+
+// ---------------------------------------------------------------------------
+// RequestComplete
+// ---------------------------------------------------------------------------
+//
+void CObexSMPlugin::RequestComplete(CObexSMRequester* aRequest, TInt aError)
+    {   
+    TRACE_FUNC_ENTRY    
+    
+    TLocodBearer bearer= aRequest->GetBearer();
+    TBool status = aRequest->GetStatus();       
+    for(TInt index=0; index<iRequests.Count();index++)
+        {        
+        if(aRequest==iRequests[index])
+            {
+            delete iRequests[index];    
+            iRequests.Remove(index);
+            iRequests.Compress();
+            break;
+            }
+        }         
+    Observer().ManageServiceCompleted(bearer,status,ImplementationUid(), aError); 	   
+    
+    TRACE_FUNC_EXIT
+    }      
+
+
+// ---------------------------------------------------------------------------
+// GetServer
+// ---------------------------------------------------------------------------
+//
+RObexSMServer&  CObexSMPlugin::GetServer()
+    {
+    TRACE_FUNC    
+    return  iObexSMServer;
+    }
+    
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMProxy.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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:  Export ECom interface implementations
+*
+*/
+
+
+#include <implementationproxy.h> //ECom header file
+#include "ObexSMPlugin.h"
+
+// ---------------------------------------------------------------------------
+// An array of TImplementationProxy objects which onnect each 
+// implemeation with its instantiation function
+// ---------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] = 
+    {
+	IMPLEMENTATION_PROXY_ENTRY(KFeatureIdSrcs , CObexSMPlugin::NewL)
+    };
+    
+// ---------------------------------------------------------------------------
+// Exported proxy function to resolve instantiation methods for an Ecom plug-in DLL
+// ---------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt & aTableCount)
+    {
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable; 
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/ObexSMRequester.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2006-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:  obexservicemanager client request class implementation
+*
+*/
+
+
+
+#include "ObexSMPlugin.h"
+#include "ObexSMRequester.h"
+#include "obexsmclient.h"
+#include "debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CObexSMRequester* CObexSMRequester::NewL(MObexSMRequestObserver* aObserver, TLocodBearer aBearer, TBool aStatus)
+    {
+    TRACE_FUNC    
+    CObexSMRequester* self = CObexSMRequester::NewLC(aObserver, aBearer,aStatus);
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//
+CObexSMRequester* CObexSMRequester::NewLC(MObexSMRequestObserver* aObserver, TLocodBearer aBearer, TBool aStatus)
+    {
+    TRACE_FUNC
+    CObexSMRequester* self = new( ELeave ) CObexSMRequester(aObserver,aBearer,aStatus);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;    
+    }
+
+// ---------------------------------------------------------------------------
+// destructor
+// ---------------------------------------------------------------------------
+//
+CObexSMRequester::~CObexSMRequester()
+    {
+    TRACE_FUNC    
+    Cancel();    
+    }
+
+
+// ---------------------------------------------------------------------------
+// DoCancel
+// ---------------------------------------------------------------------------
+//
+void CObexSMRequester::DoCancel()
+    {
+    
+    }
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//    
+void CObexSMRequester::RunL()
+    {	
+    TRACE_FUNC    
+    iObserver->RequestComplete(this,iStatus.Int());    
+    }
+// ---------------------------------------------------------------------------
+// RunError
+// ---------------------------------------------------------------------------
+//    
+TInt CObexSMRequester::RunError( TInt aError )
+    {
+    TRACE_FUNC	
+    iObserver->RequestComplete(this,aError);   
+    return KErrNone; 
+    }
+// ---------------------------------------------------------------------------
+// ActivateRequest
+// ---------------------------------------------------------------------------
+//
+void CObexSMRequester::ActivateRequest()
+    {
+    TRACE_FUNC_ENTRY    
+    TInt err;
+    RObexSMServer smServer;
+    if(iObserver)
+        {        
+        smServer=iObserver->GetServer();    
+        iStatus = KRequestPending;
+        err=smServer.ManageServices(iBearer, iBearStatus, iStatus );
+        if(err==KErrNone)
+            {
+            SetActive();    
+            }
+        else
+            {
+            iObserver->RequestComplete(this,err);        
+            }    
+        }    
+    TRACE_FUNC_EXIT    
+    }
+// ---------------------------------------------------------------------------
+// CObexSMRequester
+// ---------------------------------------------------------------------------
+//
+CObexSMRequester::CObexSMRequester(MObexSMRequestObserver* aObserver,
+                                TLocodBearer aBearer, TBool aBearStatus)
+                               : CActive(EPriorityStandard),
+                               iObserver(aObserver),
+                               iBearer(aBearer), 
+                               iBearStatus(aBearStatus)
+    {
+    TRACE_FUNC    
+    CActiveScheduler::Add( this );    
+    }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CObexSMRequester::ConstructL()
+    {
+    TRACE_FUNC    	
+    }
+
+// ---------------------------------------------------------------------------
+// GetStatus
+// ---------------------------------------------------------------------------
+//
+TBool CObexSMRequester::GetStatus()
+    {
+    return iBearStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// GetBearer
+// ---------------------------------------------------------------------------
+//    
+TLocodBearer CObexSMRequester::GetBearer()
+    {
+    return iBearer;    
+    }
+//End of file
+
+    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/usbclientwrapper.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2007-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:  Wrapper class for usb client
+*
+*/
+
+
+
+#include "usbclientwrapper.h"
+#include "debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CUSBClientWrapper::CUSBClientWrapper()
+    {    
+    TRACE_FUNC              
+    }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CUSBClientWrapper::ConstructL()
+    {    
+    TRACE_FUNC
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CUSBClientWrapper* CUSBClientWrapper::NewL()
+    {
+    CUSBClientWrapper* self = new (ELeave) CUSBClientWrapper();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );    
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// destructor
+// ---------------------------------------------------------------------------
+//
+CUSBClientWrapper::~CUSBClientWrapper()
+    {
+    TRACE_FUNC_ENTRY          
+    if( iServer.Handle() )
+        {                 
+        iServer.Close();       
+        }    
+    TRACE_FUNC_EXIT        
+    }
+    
+// ---------------------------------------------------------------------------
+// ManageUSBServices
+// ---------------------------------------------------------------------------
+//
+void  CUSBClientWrapper::ManageUSBServices(TBool aUSBStatus, 
+                                           TRequestStatus &aStatus)
+    {
+    TRACE_FUNC_ENTRY        
+    TInt err = KErrNone;         
+    TRequestStatus* status = &aStatus;
+    aStatus = KRequestPending;    
+    if( !iServer.Handle() )
+    	{    	
+       	err = iServer.Connect();              	       	
+    	}    
+    if( err != KErrNone )
+        {                
+        User::RequestComplete( status, err );            
+        return;
+        }       
+    err=iServer.ManageServices( ELocodBearerUSB, aUSBStatus, aStatus );        
+    if ( err != KErrNone )
+        {
+        User::RequestComplete( status, err );
+        }    
+    TRACE_FUNC_EXIT        
+    }
+
+// ---------------------------------------------------------------------------
+// CancelManageUSBServices
+// ---------------------------------------------------------------------------
+//
+void  CUSBClientWrapper::CancelManageUSBServices()
+    {
+    if ( iServer.Handle() )
+        {
+        iServer.CancelRequest();     
+        }        
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/usbobex.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* 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:  USB obexservicemanager client implementation
+*
+*/
+
+
+#include "usbobex.h"
+#include "debug.h"
+#include "obexsmclient.h"
+#include "usbclientwrapper.h"
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CObexUSB* CObexUSB::NewL()
+    {
+    TRACE_FUNC
+    CObexUSB* self = new (ELeave) CObexUSB();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+CObexUSB::~CObexUSB()
+    {
+    delete iUSBWrapper;
+    iUSBWrapper = NULL;
+    }
+    
+// ---------------------------------------------------------------------------
+// ManageUSBServices
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CObexUSB::ManageUSBServices(TBool aUSBStatus, TRequestStatus &aStatus)
+    {
+    iUSBWrapper->ManageUSBServices( aUSBStatus, aStatus );
+    }
+    
+// ---------------------------------------------------------------------------
+// CancelManageUSBServices
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void  CObexUSB::CancelManageUSBServices()
+    {    
+    iUSBWrapper->CancelManageUSBServices();
+    }   
+    
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CObexUSB::CObexUSB()    
+    {	        
+	}
+	
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CObexUSB::ConstructL()
+    {    
+    TRACE_FUNC    
+    iUSBWrapper = CUSBClientWrapper::NewL();
+    }  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/bwins/SrcsClientU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,13 @@
+EXPORTS
+	??0RSrcs@@QAE@XZ @ 1 NONAME ; RSrcs::RSrcs(void)
+	?Connect@RSrcs@@QAEHXZ @ 2 NONAME ; int RSrcs::Connect(void)
+	?GetDescriptorInfo@RSrcs@@QBEHAAVTSrcsUsbDescriptorInfo@@@Z @ 3 NONAME ; int RSrcs::GetDescriptorInfo(class TSrcsUsbDescriptorInfo &) const
+	?GetIrDAState@RSrcs@@QBEHAAH@Z @ 4 NONAME ; int RSrcs::GetIrDAState(int &) const
+	?ManageBTServices@RSrcs@@QAEHH@Z @ 5 NONAME ; int RSrcs::ManageBTServices(int)
+	?ManageIrDAServices@RSrcs@@QAEHH@Z @ 6 NONAME ; int RSrcs::ManageIrDAServices(int)
+	?SignalL@TSrcsStart@@QAEXXZ @ 7 NONAME ; void TSrcsStart::SignalL(void)
+	?StartThread@@YAHXZ @ 8 NONAME ; int StartThread(void)
+	?StartUSB@RSrcs@@QAEHXZ @ 9 NONAME ; int RSrcs::StartUSB(void)
+	?StopUSB@RSrcs@@QAEHXZ @ 10 NONAME ; int RSrcs::StopUSB(void)
+	?Version@RSrcs@@QBE?AVTVersion@@XZ @ 11 NONAME ; class TVersion RSrcs::Version(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/eabi/SrcsClientu.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	_Z11StartThreadv @ 1 NONAME
+	_ZN10TSrcsStart7SignalLEv @ 2 NONAME
+	_ZN5RSrcs16ManageBTServicesEi @ 3 NONAME
+	_ZN5RSrcs18ManageIrDAServicesEi @ 4 NONAME
+	_ZN5RSrcs7ConnectEv @ 5 NONAME
+	_ZN5RSrcs7StopUSBEv @ 6 NONAME
+	_ZN5RSrcs8StartUSBEv @ 7 NONAME
+	_ZN5RSrcsC1Ev @ 8 NONAME
+	_ZN5RSrcsC2Ev @ 9 NONAME
+	_ZNK5RSrcs12GetIrDAStateERi @ 10 NONAME
+	_ZNK5RSrcs17GetDescriptorInfoER22TSrcsUsbDescriptorInfo @ 11 NONAME
+	_ZNK5RSrcs7VersionEv @ 12 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsClSv.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2006-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:  ObexServicemanager opcodes, panic enumerations and other 
+*                definitions.                 
+*
+*/
+
+
+#ifndef _SRCSCLSV_H
+#define _SRCSCLSV_H
+
+//  INCLUDES
+
+#include <e32base.h>
+
+// CONSTANTS
+
+// Panic definitions
+_LIT(KSrcsPanic,"Srcs panic");
+
+// reasons for server panic
+enum TSrcsPanic
+{
+    ESrcsBadRequest,
+    ESrcsBadDescriptor,
+    ESrcsBadHelper,
+    ESrcsBadMessage,
+    ESrcsNoLimitedMessage,
+    ESrcsClassMemberVariableIsNull,
+    ESrcsClassMemberVariableIsNotNull,
+    ESrcsMainSchedulerError,
+    ESrcsNotImplementedYet
+};
+
+/// server name
+_LIT(KSrcsName,"obexserviceman");
+
+// Server path
+
+_LIT(KSrcsImg,"z:\\sys\\bin\\obexserviceman.exe");
+
+// SRCS Server Uid
+const TUid KSrcsUid={0x101F7C87};
+
+// SRCS Server thread memory allocation.
+// These are only used in WINS when the server is not running
+// before the client tries to connect to it.
+#ifdef __WINS__
+const TInt KSrcsStackSize       =0x2000;			//  8KB
+const TInt KSrcsMinHeapSize     =0x1000;		    //  4KB
+const TInt KSrcsMaxHeapSize     =0x100000;		    //  1MB
+#endif
+
+// A version must be specifyed when creating a session with the server
+const TUint KSrcsMajorVersionNumber=1;
+const TUint KSrcsMinorVersionNumber=0;
+const TUint KSrcsBuildVersionNumber=1;
+
+// Opcodes used in message passing between client and server
+enum TSrcsServRequest
+{
+    ESrcsBTServicesON,
+    ESrcsBTServicesOFF,
+    ESrcsStartUSB,
+    ESrcsStopUSB,    
+    ESrcsIrDAServicesON,
+    ESrcsIrDAServicesOFF,    
+    ESrcsCancelRequest
+};
+
+/**
+* Define transports which are supported by SRCS
+*/
+enum TSrcsTransport
+{
+    ESrcsTransportBT,
+    ESrcsTransportUSB,
+    ESrcsTransportIrDA
+};
+
+/**
+*	Transportation string definition
+*/
+_LIT8(KSrcsTransportBT,"OBEX/BT");
+_LIT8(KSrcsTransportUSB,"OBEX/USB");
+_LIT8(KSrcsTransportIrDA,"OBEX/IrDA");
+
+
+
+#endif // SRCSCLSV_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsMessage.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2002-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:  CSrcsMessage definition
+*
+*/
+
+
+#ifndef _SRCSMESSAGE_H
+#define _SRCSMESSAGE_H
+
+//  INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+
+/**
+ *  RMessage2 container class.
+ *  Ties together client requests and helper objects dealing with them.
+ *  Messages must be completed via this class.
+ */
+class CSrcsMessage : public CBase
+    {
+public:  // Constructors and destructor
+
+   /**
+    * Two-phased constructor.
+    * @param aMessage the message to handled
+    */
+    static CSrcsMessage* NewL( const RMessage2& aMessage );
+
+   /**
+    * Destructor.
+    */
+    virtual ~CSrcsMessage();
+
+public: // New functions
+
+   /**
+    * Completes a message with given reason to client.
+    * @param aReason    Reason value for complete.
+    * @return none
+    */
+    void Complete( TInt aReason );
+
+   /**
+    * Returns RMessage2 reference to message.
+    * @return Reference to message
+    */
+    const RMessage2& MessagePtr();
+
+   /**
+    * Returns pointer which can be used to cancel request.
+    * @return Pointer to be used for cancellation
+    */
+    const TAny* CancelPtr();
+
+   /**
+    * Overload of comparison between CSrcsMessages
+    * @param  aMessage  Reference to another CSrcsMessage
+    * @return Boolean   True = Messages are same
+    *                   False = Messaged differ.
+    */
+    TBool operator==( CSrcsMessage& aMessage ) const;      
+
+private:
+
+   /**
+    * C++ default constructor.
+    */
+    CSrcsMessage( const RMessage2& aMessage );
+
+private:    // Data
+    RMessage2   iMessagePtr;    // The message to be completed
+    const TAny* iCancelPtr;	    // Address of the TRequestStatus of the client-side active object - used for cancelling purposes    
+
+    };
+
+#endif      // SRCSMESSAGE_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsSecurityPolicy.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2004-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:  Obexservicemanager security policy definition
+*
+*/
+
+
+#ifndef SRCS_SECURITYPOLICY_H
+#define SRCS_SECURITYPOLICY_H
+
+// ---------------------------------------------------------------------------
+// Srcs's policy
+// ---------------------------------------------------------------------------
+//
+
+// Count of ranges
+const TUint KSrcsRangeCount = 2;
+
+
+// Definition of the ranges of IPC numbers
+const TInt KSrcsRanges[KSrcsRangeCount] = 
+    {
+	0,  // ESrcsBTServicesON to ESrcsGetIrDAState
+	7   // Out of IPC range
+    };
+
+// Policy to implement for each of the above ranges        
+const TUint8 KSrcsElementsIndex[KSrcsRangeCount] = 
+    {
+    0,	                         // applies to 0th range                          
+    CPolicyServer::ENotSupported // out of range Srcs's IPC
+    };
+
+//Specific capability checks
+const CPolicyServer::TPolicyElement KSrcsElements[] = 
+    {
+		{
+			_INIT_SECURITY_POLICY_C1(ECapabilityLocalServices), CPolicyServer::EFailClient
+		} //policy 0.
+    };
+
+// Policy structure for Srcs. This is passed to Srcs's constructor
+const CPolicyServer::TPolicy KSrcsPolicy =
+        {
+        CPolicyServer::EAlwaysPass, // Indicates that Connect attempts should be processed without any further checks.
+        KSrcsRangeCount,	        // Range count
+        KSrcsRanges,	            // ranges array
+        KSrcsElementsIndex,	        // elements' index
+        KSrcsElements		        // array of elements
+        };
+
+#endif // SRCS_SECURITYPOLICY_H
+
+// End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsServiceManager.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2002-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:  This class handles service management requests.
+*
+*/
+
+
+#ifndef _SRCSSERVICEMANAGER_H
+#define _SRCSSERVICEMANAGER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "obexserviceman.h"
+#include "SrcsTransport.h"
+#include "SrcsInterface.h"
+
+
+
+// CONSTANTS
+
+
+// FORWARD DECLARATIONS
+
+/**
+ *  Callback interface for completing request
+ * 
+ *  @since S60 v3.2
+ */ 
+class MObexSMRequestObserver
+    {   
+     public:        
+        /**
+        * Comleting request
+        *
+        * @since    S60 v3.2
+        * @param    aMessage Reference to message to be completed
+        * @param    aError   Possible error code             
+        */
+        virtual void RequestCompleted(const RMessage2 &aMessage, TInt aError)=0;   
+    };
+/**
+*  SRCS service manager class.
+*  It handles all service requests.
+*/ 
+
+class CSrcsServiceManager: public CActive
+    {
+public:
+
+    /**
+    * Two-phased constructor.
+    */
+    static CSrcsServiceManager* NewL();
+
+    /**
+    * Destructor.
+    */
+    virtual ~CSrcsServiceManager();
+        
+public:
+
+   /**
+    * Manage services on or off
+    *
+    * @since    S60 v3.2
+    * @param    aTransport  Transporter name for request
+    * @param    aState      Request On or Off
+    * @param    aObserver   Callback interface for completing request
+    * @param    aMessage    Reference to message
+    * @return   TInt    Indicates if the service request has succeed.
+    */
+    TInt ManageServices( TSrcsTransport aTransport, TBool aState, 
+                                            MObexSMRequestObserver* aObserver, 
+                                            const RMessage2& aMessage );
+   /**
+    * Manage services on or off
+    *
+    * @since    S60 v3.2
+    * @param    aTransport  Transporter name for request
+    * @param    aState      Request On or Off
+    * @param    aObserver   Callback interface for completing request
+    * @param    aMessage    Reference to message
+    * @return   None
+    */    
+    void DoManageServices( TSrcsTransport aTransport, TBool aState, MObexSMRequestObserver* aObserver, 
+                                            const RMessage2& aMessage);
+   /**
+    * Manage services on or off
+    *
+    * @since    S60 v3.2
+    * @param    aTransport  Transporter name for request
+    * @param    aState      Request On or Off    
+    * @return   None
+    */                                            
+    void RealDoManageServiceL(TSrcsTransport aTransport, TBool aState);	
+    
+private:
+   /**
+    * Second phase constructor.
+    */
+    void ConstructL();
+    
+   /**
+    * From CActive
+    *
+    * @since    S60 v3.2
+    */
+    void RunL();
+    
+    
+   /**
+    * From CActive
+    *
+    * @since    S60 v3.2
+    */
+    void RunError();
+    
+    
+   /**
+    * From CActive
+    *
+    * @since    S60 v3.2
+    */
+    void DoCancel();    
+
+    /**
+    * Handling of Service array 
+    * 
+    */	
+    void ServiceArray(CArrayPtr<CSrcsTransport> &aTransport, TBool aState);
+    
+private:
+    
+   /**
+    * C++ default constructor.
+    */
+    CSrcsServiceManager();
+    
+    /*
+     * Perform service controllers post-initialization
+     */
+    void PostInitialize(CArrayPtr<CSrcsTransport> &aTransport);
+    
+    CArrayPtr<CSrcsTransport>*		iBTConnectionArray;		// array of BT Connections
+    CArrayPtr<CSrcsTransport>*		iUSBConnectionArray;	// array of USB Connections
+    CArrayPtr<CSrcsTransport>*		iIrDAConnectionArray;	// array of IrDA Connections
+    MObexSMRequestObserver*         iRequestObserver;	
+    MObexSMRequestObserver*         iObserver; 
+    RMessage2                       iMessage;
+    TInt                            iErrorState;
+    TPtrC8                          iTransportName;     // Service name
+    TSrcsTransport                  iTransportType;     // Service type
+    TBool                           iTransportState;    // Service On/Off
+    };
+#endif      // SRCSSERVICEMANAGER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsSession.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2002-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:  SRCS session definition.
+*
+*/
+
+
+
+#ifndef _SRCSSESSION_H
+#define _SRCSSESSION_H
+
+//  INCLUDES
+
+#include <e32svr.h>
+#include "obexserviceman.h"
+#include "SrcsServiceManager.h"
+
+// FORWARD DECLARATIONS
+class CObexSM;
+class CSrcsMessage;
+
+// CLASS DECLARATION
+
+/**
+ *  CSrcsSession class represent session on server side
+ *
+ */
+class CSrcsSession : public CSession2, public MObexSMRequestObserver
+    {
+public:  // Constructors and destructor
+
+   /**
+    * Two-phased constructor.
+    */
+    static CSrcsSession* NewL(CObexSM* aServer );
+
+   /**
+    * Destructor.
+    */
+    virtual ~CSrcsSession();
+
+   /**
+    * 2nd phase construct for sessions    
+    * @return   None
+    */
+    void CreateL( );
+
+public: // Functions from base classes
+
+   /**
+    * From CSession2 ServiceL
+    * Client-server framework calls this function
+    * to handle messages from client.
+    * @param    aMessage received message class
+    * @return   None
+    */
+    virtual void ServiceL( const RMessage2 &aMessage );
+
+   /**
+	* From CSession2 DispatchMessageL
+	* Dispatchs and calls appropriate methods to
+	* handle messages.
+	* @param    aMessage received message class
+	* @return   None
+	*/
+    void DispatchMessageL( const RMessage2 &aMessage );
+
+   /**
+    * From CSession2 Server
+    * Returns reference to server.
+    * @param    None
+    * @return   Reference to server
+    */
+    CObexSM& Server();
+
+public: // New functions
+
+   /**
+    * Complete Request
+    * @param    aMessage Request message to be completed    
+    * @param    aError Error code
+    * @return   None.
+    */
+    void RequestCompleted(const RMessage2 &aMessage, TInt aError);
+
+private:  // New functions
+
+   /**
+    * OpCode function
+    * Turns Services ON/OFF according to aState
+    * @param    aState boolean to indicate status of service.
+    * @return   None.
+    */
+    void ManageServices( TSrcsTransport aTransport, TBool aState, const RMessage2& aMessage );
+
+   /**
+    * Handles error situation. Panics client
+    * or completes message with error status.
+    * @param    aError  Error code
+    * @return None
+    */
+    void HandleError( TInt aError, const RMessage2& aMessage );
+
+   /**
+    * Deletes message from message array
+    * @param    aMessage    Pointer to message to be deleted.
+    * @return   None
+    */
+    void DeleteMessage( CSrcsMessage* aMessage );
+
+    /**
+    * Finds a message from message array
+    * @param    aMessage -reference to message.
+    * @return   Pointer to CSrcsMessage -instance.
+    */
+    CSrcsMessage* FindMessage( const RMessage2& aMessage );
+
+    /**
+    * Finds the first message with the function from message array
+    * @param    aFunction -the request function.
+    * @return   Pointer to CSrcsMessage -instance, NULL if not found.
+    */
+    CSrcsMessage* FindMessage( TInt aFunction );
+
+   /**
+    * Completes a message to client
+    * @param    aMessage -reference to message.
+    * @param    aReason -code to be delivered to client.
+    */
+    void CompleteMessage( const RMessage2& aMessage, TInt aReason );
+
+   /**
+    * Completes a message to client
+    * @param    aMessage -reference to message.
+    * @param    aReason -code to be delivered to client.
+    */
+    void CompleteMessage( CSrcsMessage* aMessage, TInt aReason );
+
+   /**
+    * Completes any messages pending in the CBTManMessage array.    
+    */
+    void CompletePendingMessages();
+
+   /**
+    * Creates a new CSrcsMessage and puts it in
+    * message array.
+    * @param    aMessage -reference to message.
+    * @return   None
+    */
+    void CreateSrcsMessageL( const RMessage2& aMessage );
+    
+   /**
+    * Canceling previous request
+    * @param    aMessage -reference to message.    
+    */
+    void CancelingRequest(const RMessage2& aMessage);    
+  
+   /**
+    * Complete request when canceling
+    * @param    aMessage Request message to be completed    
+    * @param    aError Error code
+    * @param    aPostponeCompletion Not completed yet
+    * @return   None.
+    */  
+    void CompleteCanceling(const RMessage2& aMessage, TInt aError, TBool& aPostponeCompletion);
+    
+private:
+
+   /**
+    * C++ default constructor.
+    */
+    CSrcsSession( CObexSM* aServer );
+
+   /**
+    * Two-phase constructor.
+    */
+    void ConstructL();
+
+
+private:    // Data
+    CArrayPtr<CSrcsMessage>*    iMessageArray;	    // array of outstanding messages
+    CObexSM                     *iServer;
+    TBool                       iCanceling;
+    };
+
+#endif      // SRCSSESSION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsTransport.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2002-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:  Define SRCS's transport ECom interface.
+*
+*/
+
+
+
+#ifndef _SRCSTRANSPORT_
+#define _SRCSTRANSPORT_
+
+//  INCLUDES
+#include <e32base.h>
+#include <ecom.h>
+#include <badesca.h>
+#include <obex.h>
+#include "SrcsClSv.h"
+
+// CONSTANTS
+// UID of this interface
+const TUid KCSrcsTransportUid = {0x101F7C9A};
+
+// default OBEX receiving buffer size, 
+// used when service controller does not specify the receiving buffer size in its .rss
+const TUint KSRCSDefaultReceiveMtu = 0x4000;
+
+// default OBEX sending buffer size, 
+// used when service controller does not specify the sending buffer size in its .rss
+const TUint KSRCSDefaultTransmitMtu = 0x3000;
+
+ 
+ 
+
+/**
+ *	An abstract class being representative of the
+ *	concrete class which the client wishes to use.
+ *	It acts as a base, for a real class to provide all the
+ *	functionality that a client requires.
+ *	It supplies instantiation & destruction by using
+ *	the ECom framework, and functional services
+ *	by using the methods of the actual class.
+ */
+class CSrcsTransport : public CBase, public MObexAuthChallengeHandler
+    {
+public:
+
+   /**
+    * Two-phased constructor.
+    */
+    static CSrcsTransport* NewL(TUid aImplUid, CImplementationInformation* aParams );
+
+   /**
+    * Destructor.
+    */
+    virtual ~CSrcsTransport();
+
+   /** 
+	* Request a list of all available implementations which satisfies this given interface.
+	*
+    * @param aImplInfoArray Implementation instance array.
+    * @return none.
+	*/
+    static void ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray);
+
+   /** 
+	* Request a list of matching implementations which satisfies this given interface.
+	*
+    * @param aMatchString	String to be matched by the implemention.
+    * @param aImplInfoArray Implementation instance array.
+    * @return none.
+	*/
+    static void ListImplementationsL(const TDesC8& aMatchString, RImplInfoPtrArray& aImplInfoArray);
+
+   /** 
+	* Check if OBEX service is still active.
+	*
+    * @return true: OBEX service is still active.
+	*		  false: OBEX service is inactive.
+	*/
+	virtual TBool IsOBEXActive() = 0;
+    
+	/** 
+    * Perform any outstanding initialization tasks.
+    * 
+    * The transport may decide to implement two-phase initialization to improve performance where needed.
+    * For instance, USB Transport has to register all service controller's interfaces and complete the message from obex class controller
+    * as soon as possible to satisfy timing requirements and defer service controller plugin creation to later stage.
+    *
+    * @return none.
+    */
+    virtual void PostInitializeL();
+	
+
+protected:
+   /**
+    * C++ default Constructor
+    */
+    inline CSrcsTransport();
+
+   /**
+    * MObexAuthChallengeHandler implementation
+    */
+
+   /**
+    * Password for authenticated connection
+    *
+    * @param aUserID	user id.
+    */
+    virtual void GetUserPasswordL( const TDesC& aUserID ) = 0;
+
+
+private:
+    // Unique instance identifier key
+    TUid iDtor_ID_Key;
+    };
+
+#include "SrcsTransport.inl"
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/SrcsTransport.inl	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2002-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:  Define SRCS's service controller ECom interface.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// CSrcsTransport
+// -----------------------------------------------------------------------------
+//
+inline CSrcsTransport::CSrcsTransport()
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// ~CSrcsTransport
+// -----------------------------------------------------------------------------
+//
+inline CSrcsTransport::~CSrcsTransport()
+    {
+    // Destroy any instance variables and then
+    // inform the framework that this specific
+    // instance of the interface has been destroyed.
+    REComSession::DestroyedImplementation(iDtor_ID_Key);
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// -----------------------------------------------------------------------------
+//
+inline CSrcsTransport* CSrcsTransport::NewL(TUid aImplUid, CImplementationInformation* aParams)
+    {
+    return REINTERPRET_CAST(CSrcsTransport*,
+                            REComSession::CreateImplementationL(aImplUid,
+                                                                _FOFF(CSrcsTransport,iDtor_ID_Key),
+                                                                aParams));
+    }
+
+// -----------------------------------------------------------------------------
+// ListAllImplementationsL
+// -----------------------------------------------------------------------------
+//
+inline void CSrcsTransport::ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray)
+    {
+    REComSession::ListImplementationsL(KCSrcsTransportUid, aImplInfoArray);
+    }
+
+// -----------------------------------------------------------------------------
+// ListImplementationsL
+// -----------------------------------------------------------------------------
+//
+inline void CSrcsTransport::ListImplementationsL(const TDesC8& aMatchString, RImplInfoPtrArray& aImplInfoArray)
+    {
+    TEComResolverParams resolverParams;
+    resolverParams.SetDataType(aMatchString);
+    resolverParams.SetWildcardMatch(EFalse);
+    REComSession::ListImplementationsL(KCSrcsTransportUid, resolverParams, aImplInfoArray);
+    }
+    
+inline void CSrcsTransport::PostInitializeL()
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2002 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: 
+*     Central place for nice debug-type macros & functions
+*
+*/
+
+
+#ifndef _SRCS_DEBUG_H
+#define _SRCS_DEBUG_H
+
+#ifdef _DEBUG
+
+// Enable this to enable memory tracing
+// to SRCS
+//#define MEMTRACE
+
+// Following define is to enable OOM
+// situations in SRCS
+// NOTE! SHOULD NEVER BE IN RELEASES
+//#define TEST_OOM
+
+#ifdef __WINS__
+
+// File logging for WIS
+#define __FLOGGING__
+
+#else
+
+// Logging with RDebug for target HW
+#define __CLOGGING__
+//#define __FLOGGING__
+
+
+#endif //__WINS__
+
+#endif
+
+#if defined ( __FLOGGING__ )
+
+_LIT(KLogFile,"Srcslog.txt");
+_LIT(KLogDir,"SRCS");
+
+#include <f32file.h>
+#include <flogger.h>
+
+#define FLOG(a) {FPrint(a);}
+
+#define FLOGHEX(value, len) {RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, "", " ",value, len);}
+
+#define FTRACE(a) {a;}
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+}
+
+inline void FHex(const TUint8* aPtr, TInt aLen)
+{
+    RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen);
+}
+
+inline void FHex(const TDesC8& aDes)
+{
+    FHex(aDes.Ptr(), aDes.Length());
+}
+
+// RDebug logging
+#elif defined(__CLOGGING__)
+
+#include <e32svr.h>
+
+#define FLOG(a) {RDebug::Print(a);}
+
+#define FLOGHEX(a)
+
+#define FTRACE(a) {a;}
+
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+}
+
+
+#else   // No loggings --> reduced code size
+#define FLOG(a)
+#define FLOGHEX(a)
+#define FTRACE(a)
+
+#endif //_DEBUG
+
+#endif // SRCS_DEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/obexserviceman.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2006-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:  ObexServicemanager opcodes, panic enumerations and other 
+                 definitions.
+*
+*/
+
+
+#ifndef OBEXSERVICEMAN_H
+#define OBEXSERVICEMAN_H
+
+//  INCLUDES
+
+#include <e32base.h>
+#include "SrcsClSv.h"
+
+/**
+* Function to start server.
+*/
+IMPORT_C void RunServerL();
+
+/**
+* Utility to panic the client.
+*/
+void PanicClient(const RMessage2& aMessage, TInt aPanic);
+
+/**
+* Utility to panic server.
+*/
+void PanicServer(TInt aPanic);
+
+/**
+* Provides server startup parameters.
+*/
+class TSrcsStart
+{
+public:
+    /**
+    * Constructor
+    */
+    TSrcsStart(TRequestStatus& aStatus);
+
+    /**
+    * Default constructor
+    * 
+    * @since s60 3.2
+    */
+    inline TSrcsStart() {};
+
+    /**
+    * Provides startup parameters
+    *
+    * @since s60 3.2
+    */
+    TPtrC AsCommand() const;
+
+    /**
+    * Signalling from Server start.
+    *
+    * @since s60 3.2
+    */
+    IMPORT_C void SignalL();
+
+    /**
+    * Initialize from memory
+    *
+    * @since s60 3.2
+    */
+    TInt Set(const TDesC& aData);
+
+public:     // Data
+    TThreadId iId;
+    TRequestStatus* iStatus;
+};
+
+/**
+* Number of interfaces and length of descriptors registered by SRCS
+*/
+class TSrcsUsbDescriptorInfo
+	{
+public:
+	TInt iNumInterfaces;
+	TInt iLength;
+	};
+
+#endif // SRCSCLSV_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/obexservicemanprop.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+ * 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:
+ * Obex Service Manager P&S keys definitions
+ *
+ */
+ 
+#ifndef __OBEXSERVICEMANPROP_H__
+#define __OBEXSERVICEMANPROP_H__
+
+#include <e32std.h>
+
+const TUid KUidObexSMCategory = {0x101F7C87};
+const TUint KObexSMPostInitErrorProperty = 1;    // Post Initialization Error Code
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/inc/obexsm.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2006-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:  CObexSM class definition 
+                 definitions.
+*
+*/
+
+
+
+#ifndef OBEXSM_H
+#define OBEXSM_H
+
+//  INCLUDES
+
+#include <e32svr.h>
+#include "obexserviceman.h"
+#include "SrcsServiceManager.h"
+
+// FORWARD DECLARATIONS
+
+
+/**
+ *  CSrcs server core class
+ *
+ */
+class CObexSM : public CPolicyServer
+    {
+        
+public: 
+
+   /**
+    * Two-phased constructor.
+    */
+    static CObexSM* NewL();
+
+   /**
+    * Destructor.
+    */
+    ~CObexSM();
+
+public: // New functions
+
+   /**
+    * Initializes all server database classes
+    *
+    * @since s60 3.2
+    */
+    void InitialiseServerL();
+
+   /**
+    * Manages Services that are handled by SRCS 
+    *
+    * @since s60 3.2
+    * @param aTransport the used transport media
+    * @param aState Boolean ON/OFF
+    * @param aObserver the request completing observer
+    * @param aMessage the message to be completed
+    * @return TInt indicating the success of call.
+    */
+    TInt ManageServices(TSrcsTransport aTransport,TBool aState, MObexSMRequestObserver* aObserver, 
+                        const RMessage2& aMessage);
+
+    
+
+public: // Functions from base classes
+
+
+   /**
+    * From CServer NewSessionL.
+    *
+    * @since s60 3.2
+    * @param aVersion version number
+    * @param aMessage the connect message
+    * @return Pointer to session
+    */
+    CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const;
+    
+   /**
+    * Increase session count
+    *
+    * @since s60 3.2    
+    */
+    void IncSessionCount();        
+    
+   /**
+    * Decrese session count and shutdown server when all session are closed.
+    *
+    * @since s60 3.2        
+    */    
+    void DecSessionCount();
+
+private:
+
+   /**
+    * Default constructor
+    */
+    CObexSM( TInt aPriority );
+
+   /**
+    * Two-Phase constructor
+    */
+    void ConstructL();
+
+private:    // Data
+    CSrcsServiceManager*    iServiceHandler;            // Service Handler
+    TInt                    iSessionCount;
+    };
+
+#endif // OBEXSM_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsMessage.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2002-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:  obexserviceman message handling.
+*
+*/
+
+
+// INCLUDE FILES
+#include    "SrcsMessage.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CSrcsMessage::CSrcsMessage(const RMessage2& aMessage)
+    {
+    iMessagePtr = aMessage;
+    iCancelPtr = aMessage.Ptr2();
+    }
+// ---------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CSrcsMessage* CSrcsMessage::NewL(const RMessage2& aMessage)
+    {
+    return (new(ELeave) CSrcsMessage(aMessage));
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CSrcsMessage::~CSrcsMessage()
+    {
+    }
+
+// ---------------------------------------------------------
+// Complete
+// Completes the RMessage2 and deletes any associated helper.
+// ---------------------------------------------------------
+//
+void CSrcsMessage::Complete(TInt aReason)
+    {
+    //complete the message
+    iMessagePtr.Complete(aReason);
+    }
+
+// ---------------------------------------------------------
+// MessagePtr
+// Returns reference to RMessage2.
+// ---------------------------------------------------------
+//
+const RMessage2& CSrcsMessage::MessagePtr()
+    {
+    return iMessagePtr;
+    }
+
+// ---------------------------------------------------------
+// CancelPtr
+// The CancelPtr is the address of the TRequestStatus of the
+// client-side active object dealing with the request.
+// When a request is cancelled, it is located server-side using
+// this address.
+// ---------------------------------------------------------
+//
+const TAny* CSrcsMessage::CancelPtr()
+    {
+    return iCancelPtr;
+    }
+
+// ---------------------------------------------------------
+// operator==
+// Compares Message pointers, if they are same, return value
+// is ETrue, else EFalse.
+// ---------------------------------------------------------
+//
+TBool CSrcsMessage::operator==(CSrcsMessage& aMessage) const
+    {
+    if (iMessagePtr == aMessage.MessagePtr())
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsServiceManager.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2002-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:  This class handles services management requests.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "SrcsServiceManager.h"
+#include "debug.h"
+#include <e32property.h>
+#include "obexservicemanprop.h"
+
+
+// CONSTANTS
+
+// The granularity of the array used to hold BT, IrDA and USB connnection objects
+static const TInt KConnectionArrayGranularity = 4;
+
+const TUint32 KObexSMSid = {0x101F7C87};
+static _LIT_SECURITY_POLICY_S0(KObexSMOnlyPolicy,KObexSMSid);
+static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CSrcsServiceManager::CSrcsServiceManager():CActive(CActive::EPriorityStandard)
+    {
+    CActiveScheduler::Add(this);    
+    }
+    
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CSrcsServiceManager::~CSrcsServiceManager()
+    {       
+    Cancel();
+    RProperty::Delete(KUidObexSMCategory, KObexSMPostInitErrorProperty);
+    if ( iBTConnectionArray )
+        {
+        // Cleanup the array
+        iBTConnectionArray->ResetAndDestroy();
+        }
+    delete iBTConnectionArray;
+
+    if ( iUSBConnectionArray )
+        {
+        // Cleanup the array
+        iUSBConnectionArray->ResetAndDestroy();        
+        }
+    delete iUSBConnectionArray;
+
+
+    if ( iIrDAConnectionArray )
+        {
+        // Cleanup the array
+        iIrDAConnectionArray->ResetAndDestroy();
+        }
+    delete iIrDAConnectionArray;
+
+	REComSession::FinalClose();
+    }
+
+// ---------------------------------------------------------
+// NewL
+// ---------------------------------------------------------
+//
+CSrcsServiceManager* CSrcsServiceManager::NewL()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: NewL"));
+    CSrcsServiceManager* self = new (ELeave) CSrcsServiceManager();
+	CleanupStack::PushL(self);
+    self->ConstructL();
+	CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------
+//
+void CSrcsServiceManager::ConstructL()
+    {
+    iBTConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
+    iUSBConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
+	iIrDAConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
+	
+    TInt err = RProperty::Define(KUidObexSMCategory, KObexSMPostInitErrorProperty, RProperty::EInt, KAllowAllPolicy, KObexSMOnlyPolicy);
+    if ( err != KErrNone && err != KErrAlreadyExists )
+        {
+        User::LeaveIfError(err);
+        }
+    (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,KErrNone);
+    }
+
+// ---------------------------------------------------------
+// ManagerServicesL
+// Method to manage service controllers on all supported transports.
+// ---------------------------------------------------------
+//
+TInt CSrcsServiceManager::ManageServices( TSrcsTransport aTransport, TBool aState, 
+                                            MObexSMRequestObserver* aObserver, 
+                                            const RMessage2& aMessage)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServices"));
+    if ( !IsActive() ) 
+        { 
+        iStatus=KRequestPending; 
+        DoManageServices( aTransport,aState, aObserver, aMessage );
+        SetActive();
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServices KErrNone"));
+        return KErrNone; 
+        } 
+    else 
+        { 
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServices KErrServerBusy"));
+        return KErrServerBusy; 
+        }
+    }
+
+// ---------------------------------------------------------
+// DoManageServices
+// Method to manage service controllers on all supported transports.
+// ---------------------------------------------------------
+//    
+void CSrcsServiceManager::DoManageServices(TSrcsTransport aTransport, TBool aState, MObexSMRequestObserver* aObserver, 
+                                            const RMessage2& aMessage)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: DoManageServices"));
+    iObserver=aObserver;
+    iMessage=aMessage;
+    iTransportType = aTransport;
+    iTransportState = aState;
+    TRAPD(error,RealDoManageServiceL(aTransport,aState));    
+    if (error != KErrNone)
+        {
+        iErrorState=error;    
+        }
+    TRequestStatus* temp = &iStatus;
+    User::RequestComplete( temp, iErrorState );
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: DoManageServices exit"));
+    }
+
+// ---------------------------------------------------------
+// RunL
+// Notifies request completion
+// ---------------------------------------------------------
+//    
+void CSrcsServiceManager::RunL()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL"));
+    iObserver->RequestCompleted(iMessage,iStatus.Int());
+
+    // If the transport is being turned on, launch post-initialization routine 
+    // for appropriate service controllers array
+    if (iTransportState)
+        {
+        switch(iTransportType)
+            {
+        case ESrcsTransportBT:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(Bluetooth)"));
+            PostInitialize(*iBTConnectionArray);
+            break;
+        case ESrcsTransportUSB:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(USB)"));
+            PostInitialize(*iUSBConnectionArray);
+            break;
+        case ESrcsTransportIrDA:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(IrDA)"));
+            PostInitialize(*iIrDAConnectionArray);
+            break;
+        default:
+            FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Transport not supported.")));
+            break;
+            }
+        }
+    else
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL() - transport is turned off"));
+        }
+
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL exit"));
+    }
+// ---------------------------------------------------------
+// RunErrorL
+// ---------------------------------------------------------
+//        
+void CSrcsServiceManager::RunError()
+    {
+    }
+// ---------------------------------------------------------
+// DoCancel
+// ---------------------------------------------------------
+//            
+void CSrcsServiceManager::DoCancel()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: DoCancel"));
+    }
+// ---------------------------------------------------------
+// RealDoManageServiceL
+// Method to manage service controllers on all supported transports.
+// ---------------------------------------------------------
+//                
+void CSrcsServiceManager::RealDoManageServiceL(TSrcsTransport aTransport, TBool aState)
+    {    
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RealDoManageServiceL"));
+ 
+    switch(aTransport)
+        {
+    case ESrcsTransportBT:
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(Bluetooth)"));
+        iTransportName.Set(KSrcsTransportBT);
+        ServiceArray(*iBTConnectionArray, aState);
+        break;
+    case ESrcsTransportUSB:
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(USB)"));
+        iTransportName.Set(KSrcsTransportUSB);
+        ServiceArray(*iUSBConnectionArray, aState);
+        break;
+    case ESrcsTransportIrDA:
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(IrDA)"));
+        iTransportName.Set(KSrcsTransportIrDA);
+        ServiceArray(*iIrDAConnectionArray, aState);
+        break;
+    default:
+        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Transport not supported.")));
+        User::Leave(KErrNotSupported);              
+        }
+        
+    }
+
+// ---------------------------------------------------------
+// CSrcsServiceManager
+// Method to manage Service arrays
+// ---------------------------------------------------------
+//     
+void CSrcsServiceManager::ServiceArray(CArrayPtr<CSrcsTransport> &aTransport, TBool aState)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ServiceArray"));
+
+    // We start and stop services by aState value
+    if ( aState ) // trun on service
+        {
+	    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(Turn ON)"));
+        // We do not re-start services if they have been started        
+        if (!(aTransport.Count()))
+            {   			
+			//Declare array of service controllers
+            RImplInfoPtrArray infoArrayServiceController;                        
+                
+			//Declare array of SRCS transport plugins
+            RImplInfoPtrArray infoArrayTranport;
+            CleanupClosePushL(infoArrayTranport);		
+            
+            CleanupClosePushL(infoArrayServiceController);
+
+            //List all SRCS transport plugin implementations
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL about to list Transport Impl"));
+            CSrcsTransport::ListImplementationsL(iTransportName,infoArrayTranport);
+
+			//Found SRCS transport plugin. Then start to enumerate service controller and make connections.
+            if(infoArrayTranport.Count())
+                {
+				//There should be only one transport plugin of each type. Others are just ignored.
+                if(infoArrayTranport.Count() != 1) 
+                    {
+                    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Warning: Found %d transport implementations." ), infoArrayTranport.Count()));
+                    }
+
+                FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Using Transport ImplementationUid %x"), infoArrayTranport[0]->ImplementationUid()));
+
+				//enumerate service controllers
+                CSrcsInterface::ListImplementationsL(iTransportName,infoArrayServiceController);
+
+                // Loop through each found service controller, 
+                // create SRCS transport connection for each found service controller
+				// and instantiate the service controller.
+                CSrcsTransport *cm;
+
+                for (TInt i=0; i< infoArrayServiceController.Count(); i++)
+                    {
+                    // TRAP is needed because of OOM situations.
+                    // Otherwise whole server is leaving and panicing.
+                    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Found Service Controller ImplementationUid %x"), infoArrayServiceController[i]->ImplementationUid()));                  
+                    
+                    TRAPD( error, cm = CSrcsTransport::NewL(infoArrayTranport[0]->ImplementationUid(), infoArrayServiceController[i] ));
+                    if ( error != KErrNone )
+                        {
+                        // Error when creating service controller (e.g. no memory). Cleanup and zero.
+                        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Create implementation failed with error code %d"), error));
+                        }
+                    else
+                        {
+                        // Add this connection to the list
+                        aTransport.AppendL(cm);
+                        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL: Implementation created successfully.")));
+                        }
+                    }
+                }
+            else
+                {
+                FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Transport implementation not found.")));
+                }
+
+            // Clean up            
+            infoArrayTranport.ResetAndDestroy();                 
+            infoArrayServiceController.ResetAndDestroy();                
+            CleanupStack::PopAndDestroy(2); //infoArrayServiceController
+           
+            }
+        }
+    else // turn off service
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(Turn OFF)"));    	        
+        aTransport.ResetAndDestroy();
+        // This is a special case for USB transport. Clear errors.
+        if (iTransportType == ESrcsTransportUSB)
+            {
+            (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,KErrNone);
+            }
+        }        
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RealDoManageServiceL exit"));
+    }
+
+// ------------------------------------------------------------------------------------------
+// CSrcsServiceManager
+// This function iterates through all detected service controllers for given transport 
+// and calls post-initialization routines.
+// This solution is implemented mainly to satisfy tough timing requirements for USB transport
+// ------------------------------------------------------------------------------------------
+//
+void CSrcsServiceManager::PostInitialize(CArrayPtr<CSrcsTransport> &aTransport)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize()"));
+    for (TInt i=0; i < aTransport.Count(); ++i)
+        {
+        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitilize. Processing Service Controller[%d]"), i));
+        TRAPD(err,aTransport[i]->PostInitializeL());
+        
+        // This is a special case for USB transport to notify the USB OBEX class controller about any errors occured
+        // at Post-Initialization stage.
+        // Post-initialization is not implemented for Bluetooth and IrDA transports, so there is no need to notify.
+        if ((err != KErrNone) && (iTransportType == ESrcsTransportUSB))
+            {
+            (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,err);
+            FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize. Transport[%d]::PostInitializeL() returned %d, exiting..."), i, err));
+            break;
+            }
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize() - DONE post initialization"));
+        }
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize() exit"));
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/src/SrcsSession.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,502 @@
+/*
+* Copyright (c) 2002-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:  SRCS session handler. Dispatchs requests from
+*                clients and serves them.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "SrcsSession.h"
+#include "obexsm.h"
+#include "SrcsMessage.h"
+#include "debug.h"
+#include <btfeaturescfg.h>
+
+
+// CONSTANTS
+
+// The granularity of the array used to hold CSrcsMessage objects
+static const TInt KMessageArrayGranularity = 4;
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// constructor - must pass client to CSession2
+// ---------------------------------------------------------
+//
+CSrcsSession::CSrcsSession(CObexSM* aServer) : CSession2(),
+                                            iServer(aServer),
+                                            iCanceling(EFalse)
+    {
+    if(iServer)
+        {    
+        iServer->IncSessionCount();
+        }
+    }
+// ---------------------------------------------------------
+// destructor
+// ---------------------------------------------------------
+//
+CSrcsSession::~CSrcsSession()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession closed."));
+    if ( iMessageArray )
+        {
+        // Cleanup the array
+        iMessageArray->ResetAndDestroy();
+        }
+    delete iMessageArray;
+    if(iServer)
+        {    
+        iServer->DecSessionCount();
+        } 
+    }
+// ---------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CSrcsSession* CSrcsSession::NewL(CObexSM* aServer)
+    {
+    return new(ELeave) CSrcsSession(aServer);
+    }
+
+// ---------------------------------------------------------
+// Server
+// Return a reference to CSrcs
+// ---------------------------------------------------------
+CObexSM& CSrcsSession::Server()
+    {
+    return *iServer;
+    }
+
+// ---------------------------------------------------------
+// CreateL
+// 2nd phase construct for sessions
+// - called by the CServer framework
+// ---------------------------------------------------------
+void CSrcsSession::CreateL()
+    {
+    // Add session to server first.
+    // If anything leaves, it will be removed by the destructor
+    ConstructL();
+    }
+
+// ---------------------------------------------------------
+// ConstructL
+// 2nd phase construct for sessions
+// - called by the CServer framework
+//
+// ---------------------------------------------------------
+void CSrcsSession::ConstructL()
+    {
+    iMessageArray = new(ELeave) CArrayPtrFlat<CSrcsMessage>(KMessageArrayGranularity);
+    }
+
+// ---------------------------------------------------------
+// HandleError
+// Handle an error from ServiceL()
+// A bad descriptor error implies a badly programmed client, so panic it;
+// otherwise report the error to the client
+//
+// ---------------------------------------------------------
+void CSrcsSession::HandleError(TInt aError, const RMessage2& aMessage)
+    {
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession::HandleError(): %d"), aError));
+    if (aError==KErrBadDescriptor)
+        {
+        PanicClient( aMessage, ESrcsBadDescriptor);
+        }
+    else
+        {
+        CompleteMessage( aMessage, aError);
+        }
+    }
+
+
+// ---------------------------------------------------------
+// ServiceL
+// Calls DispatchMessage under trap harness
+//
+// ---------------------------------------------------------
+void CSrcsSession::ServiceL(const RMessage2& aMessage)
+    {
+    // First make our own message from RMessage2
+    // TRAP because message needs to be completed
+    // in case of Leave.        
+    TRAPD( err, CreateSrcsMessageL( aMessage ));
+    if ( err )
+        {
+        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: ServiceL. Error %d when creating message."), err));
+        aMessage.Complete( err );
+        }
+    else
+        {
+        err = KErrNone;
+        TRAP( err ,DispatchMessageL( aMessage ));
+
+        // If we have an error, try to handle it with handle-error.
+        if ( err )
+            {
+            HandleError( err, aMessage );
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CreateSrcsMessageL
+// Creates a CSrcsMessage and appends it to iMessageArray.
+// ---------------------------------------------------------
+//
+void CSrcsSession::CreateSrcsMessageL(const RMessage2& aMessage)
+    {
+    __ASSERT_DEBUG(iMessageArray!=NULL, PanicServer(ESrcsClassMemberVariableIsNull));
+    CSrcsMessage* message = CSrcsMessage::NewL(aMessage);
+    CleanupStack::PushL( message );
+    iMessageArray->AppendL( message );
+    CleanupStack::Pop();
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: MessageArray count: %d"), iMessageArray->Count()));
+    }
+
+// ---------------------------------------------------------
+// CompleteMessage
+// Finds a message based on aMessage and completes it.
+// ---------------------------------------------------------
+//
+void CSrcsSession::CompleteMessage(const RMessage2& aMessage, TInt aReason)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteMessage."));
+    CSrcsMessage* message = FindMessage(aMessage);
+    __ASSERT_DEBUG(message!=NULL, PanicServer(ESrcsBadMessage));
+    message->Complete(aReason);
+    DeleteMessage( message );
+    }
+
+// ---------------------------------------------------------
+// CompleteMessage
+// Completes given message.
+// ---------------------------------------------------------
+//
+void CSrcsSession::CompleteMessage(CSrcsMessage* aMessage, TInt aReason)
+    {
+    __ASSERT_DEBUG(aMessage!=NULL, PanicServer(ESrcsBadMessage));
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteMessage."));
+    aMessage->Complete(aReason);
+    DeleteMessage(aMessage);
+    }
+
+// ---------------------------------------------------------
+// CompletePendingMessages
+// Completes any messages pending in the CBTManMessage array.
+// ---------------------------------------------------------
+void CSrcsSession::CompletePendingMessages()
+    {
+    __ASSERT_DEBUG(iMessageArray!=NULL, PanicServer(ESrcsClassMemberVariableIsNull));
+    CSrcsMessage* messagePtr = NULL;
+    TInt count = iMessageArray->Count();
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession::CompletePendingMessages. Message count: %d"), count));
+
+    // Messages can be completed from array
+    // and deleted after that.
+    for ( TInt index = ( count-1 ) ; index >= 0 ; index-- )
+        {
+        messagePtr = iMessageArray->At(index);
+        messagePtr->Complete(KErrDied);
+        iMessageArray->Delete(index);
+        delete messagePtr;
+        messagePtr = NULL;
+        }
+    }
+
+// ---------------------------------------------------------
+// FindMessage
+// Searches the array of CBTManMessages for the one dealing with aMessage.
+// ---------------------------------------------------------
+//
+CSrcsMessage* CSrcsSession::FindMessage(const RMessage2& aMessage)
+    {
+    __ASSERT_DEBUG(iMessageArray!=NULL, PanicServer(ESrcsClassMemberVariableIsNull));
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: FindMessage."));
+    RMessagePtr2 messagePtr = aMessage;
+    CSrcsMessage* ptr = NULL;
+
+    for ( TInt index = 0 ; index < iMessageArray->Count() ; index++ )
+        {
+        ptr = iMessageArray->At( index );
+        if( ptr->MessagePtr() == messagePtr )
+            {
+            FLOG(_L("[SRCS]\tserver\tCSrcsSession: FindMessage. Message found"));
+            return ptr;
+            }
+        }
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// FindMessage
+// Searches the array for the 1st message with the function.
+// ---------------------------------------------------------
+//
+CSrcsMessage* CSrcsSession::FindMessage(TInt aFunction)
+    {
+    __ASSERT_DEBUG(iMessageArray!=NULL, PanicServer(ESrcsClassMemberVariableIsNull));
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: FindMessage aFunction %d"), aFunction));
+    CSrcsMessage* ptr = NULL;
+    for ( TInt index = 0 ; index < iMessageArray->Count() ; index++ )
+        {
+        ptr = iMessageArray->At( index );
+        if ( ptr->MessagePtr().Function() == aFunction )
+            {
+            FLOG(_L("[SRCS]\tserver\tCSrcsSession: FindMessage. Message found"));
+            return ptr;
+            }
+        }
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: FindMessage. Message not found"));
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// DeleteMessage
+// Find the CSrcsMessage in the message array and delete it.
+// ---------------------------------------------------------
+//
+void CSrcsSession::DeleteMessage(CSrcsMessage* aMessage)
+    {
+    __ASSERT_DEBUG(iMessageArray!=NULL, PanicServer(ESrcsClassMemberVariableIsNull));
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: DeleteMessage. "));
+    CSrcsMessage* ptr = NULL;
+    TInt count = iMessageArray->Count();
+    for ( TInt index = ( count-1 ) ; index >= 0 ; index-- )
+        {
+        ptr = iMessageArray->At( index );
+        if( ptr == aMessage )
+            {
+            FLOG(_L("[SRCS]\tserver\tCSrcsSession: Message deleting. "));
+            //Delete the message first before removing from the array since a helper associated
+            //with the message will try to find the message by parsing the array as part of the
+            //destruction the message.
+            delete ptr;
+            iMessageArray->Delete( index );
+            ptr = NULL;
+            break;
+            }
+        }
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: MessageArray count: %d"), iMessageArray->Count()));
+    //compress the array if the count is less than the length - granularity AND if the count != 0
+    if ( iMessageArray->Count() )
+        {
+        if (iMessageArray->Length() - iMessageArray->Count() >= KMessageArrayGranularity)
+            iMessageArray->Compress();
+        }
+    }
+
+
+// ---------------------------------------------------------
+// DispatchMessageL
+// service a client request; test the opcode and then do
+// appropriate servicing
+// ---------------------------------------------------------
+//
+void CSrcsSession::DispatchMessageL(const RMessage2 &aMessage)
+    {
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: DispatchMessageL function %d"), aMessage.Function()));
+    iCanceling=EFalse;
+    switch (aMessage.Function())
+        {
+        // Turn BT services ON (with service handler).
+    case ESrcsBTServicesON:
+            {
+			if ( BluetoothFeatures::EnterpriseEnablementL() != BluetoothFeatures::EEnabled )
+				{
+				CompleteMessage(aMessage, KErrNotSupported);
+				}
+			else
+				{			
+	            ManageServices(ESrcsTransportBT, ETrue, aMessage);
+				}
+            break;
+            }
+        // Turn BT services OFF.
+    case ESrcsBTServicesOFF:
+            {
+            ManageServices(ESrcsTransportBT, EFalse, aMessage);
+            break;
+            }
+
+        // Turn IrDA services ON (with service handler).
+    case ESrcsIrDAServicesON:
+            {
+            ManageServices(ESrcsTransportIrDA, ETrue, aMessage);
+            break;
+            }
+        // Turn IrDA services OFF.
+    case ESrcsIrDAServicesOFF:
+            {
+            ManageServices(ESrcsTransportIrDA, EFalse, aMessage);
+            break;
+            }
+
+    case ESrcsStartUSB:
+            {
+            ManageServices(ESrcsTransportUSB, ETrue, aMessage);
+            break;
+            }
+    case ESrcsStopUSB:
+            {
+            ManageServices(ESrcsTransportUSB, EFalse, aMessage);
+            break;
+            }    
+     case ESrcsCancelRequest:
+            {            
+            FLOG(_L("[SRCS]\tserver\tCSrcsSession: DispatchMessageL: ESrcsCancelRequest"));
+            CancelingRequest(aMessage);
+            break;
+            }
+    default:
+            {
+            PanicClient( aMessage, ESrcsBadRequest);
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// ManageServicesL
+// OpCode function; Manages Services.
+// ---------------------------------------------------------
+//
+void CSrcsSession::ManageServices(TSrcsTransport aTransport, TBool aState, 
+                                  const RMessage2& aMessage)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: ManageServicesL"));
+    TInt retVal = Server().ManageServices(aTransport, aState, this, aMessage);
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: ManageServicesL return %d"), retVal));
+    }
+
+// ---------------------------------------------------------
+// CancelingRequest
+// Canceling the ongoing request.
+// ---------------------------------------------------------
+//
+void CSrcsSession::CancelingRequest(const RMessage2& aMessage)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: CancelingRequest"));
+    iCanceling=ETrue;          
+    if (iMessageArray->Count() == 1)
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsSession: CancelingRequest completing"));
+        CompleteMessage(aMessage, KErrGeneral);        
+        }
+    else
+        {
+        //The cancel handling continues, when another request completes.
+        }
+    }
+    
+// ---------------------------------------------------------
+// RequestCompleted
+// ---------------------------------------------------------
+//   
+void CSrcsSession::RequestCompleted(const RMessage2 &aMessage, TInt aError)
+    {          
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: RequestCompleted"));
+    TBool postponeCompletion = EFalse;
+    if ( !iCanceling )
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsSession: RequestCompleted completing"));
+        CompleteMessage( aMessage, aError ); 
+        }
+    else
+        {
+        CompleteCanceling(aMessage, aError, postponeCompletion);
+        }
+    if ( !postponeCompletion && iMessageArray->Count() > 0 )
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsSession: RequestCompleted dispatching"));
+        CSrcsMessage* messagePtr = NULL; 
+        messagePtr=iMessageArray->At( 0 ); 
+        RMessage2 message=messagePtr->MessagePtr(); 
+        TRAP_IGNORE( DispatchMessageL( message ) );
+        }    
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: RequestCompleted exit"));
+    }
+
+// ---------------------------------------------------------
+// CompleteCanceling
+// Only USB service cancel is handled, since Locod Service 
+// Plugin API does not allow cancel for BT or IrDA.
+// ---------------------------------------------------------
+//
+void CSrcsSession::CompleteCanceling(const RMessage2& aMessage, TInt aError, 
+                                     TBool& aPostponeCompletion)
+    {          
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling"));
+    TBool cancelMsgFound = EFalse;
+    CSrcsMessage* messagePtr = NULL;
+    FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling function %d"), 
+        aMessage.Function()));
+    switch ( aMessage.Function() )
+        {    
+        case ESrcsStartUSB:
+            messagePtr = FindMessage(ESrcsCancelRequest);
+            if ( messagePtr )
+                {
+                FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling ESrcsStartUSB found cancel req"));
+                RMessage2 message=messagePtr->MessagePtr();                
+                ManageServices(ESrcsTransportUSB, EFalse,  message);
+                aPostponeCompletion = ETrue;
+                cancelMsgFound = ETrue;
+                }
+            break;
+        case ESrcsStopUSB:
+            messagePtr = FindMessage(ESrcsCancelRequest);
+            if ( messagePtr )
+                {
+                CompleteMessage(aMessage, KErrCancel); 
+                CompleteMessage(messagePtr, aError); 
+                cancelMsgFound = ETrue;
+                }
+            break;
+        case ESrcsCancelRequest:
+            //either start or stop USB
+            messagePtr = FindMessage(ESrcsStartUSB);
+            if ( !messagePtr )
+                {
+                messagePtr = FindMessage(ESrcsStopUSB);
+                }
+            if ( messagePtr )
+                {
+                CompleteMessage(messagePtr, KErrCancel); 
+                CompleteMessage(aMessage, aError);
+                cancelMsgFound = ETrue;
+                }
+            break;
+        default:
+            FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling ESrcsCancelRequest unhandled msg"));
+            break;
+        }
+    if ( !cancelMsgFound )
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling no message"));
+        CompleteMessage(aMessage, KErrGeneral);
+        }
+    FLOG(_L("[SRCS]\tserver\tCSrcsSession: CompleteCanceling exit"));    
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/src/obexsm.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2002-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:  Implementation of obexservicemanager core.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "obexserviceman.h"
+#include "obexsm.h"
+#include "SrcsSession.h"
+#include "SrcsServiceManager.h"
+#include "debug.h"
+#include "SrcsSecurityPolicy.h"
+#include "obexutilsmessagehandler.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CObexSM::CObexSM(TInt aPriority) 
+	// aPriority: priority of AO
+	// KSrcsPolicy: TPolicy structure of Faxmodem
+	:CPolicyServer( aPriority, KSrcsPolicy )
+    {
+    }
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CObexSM::~CObexSM()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcs: Destructor") );
+
+    delete iServiceHandler;
+
+   }
+
+// ---------------------------------------------------------
+// NewL
+// ---------------------------------------------------------
+//
+CObexSM* CObexSM::NewL()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcs: NewL") );
+    CObexSM* self=new(ELeave) CObexSM( EPriorityBackground );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------
+//
+void CObexSM::ConstructL()
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcs: ConstrucL") );
+    // and class for service handling
+    iServiceHandler = CSrcsServiceManager::NewL();
+    // Then we are ready to start server
+    StartL(KSrcsName);
+    // Do server initialisation
+    InitialiseServerL();
+    }
+
+// ---------------------------------------------------------
+// NewSessionL
+// Create session(s) to client(s)
+//
+// ---------------------------------------------------------
+//
+CSession2* CObexSM::NewSessionL( const TVersion& aVersion, const RMessage2& ) const
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcs NewSessionL"));
+
+    // check we're the right version
+    TVersion srvVersion(KSrcsMajorVersionNumber,
+                        KSrcsMinorVersionNumber,
+                        KSrcsBuildVersionNumber);
+
+    if (!User::QueryVersionSupported(srvVersion,aVersion))
+        {
+        User::Leave(KErrNotSupported);
+        }
+
+    // make new session
+        
+    return ( CSrcsSession::NewL(const_cast<CObexSM*>(this)) );
+    }
+
+// ---------------------------------------------------------
+// InitialiseServerL
+// Start Media Watchers at this point.
+// ---------------------------------------------------------
+//
+void CObexSM::InitialiseServerL()
+    {
+    FLOG(_L("[SRCS]\tserver\tSrcs Initialise Server"));
+    // If phone battery is removed during file receiving, 
+    // There will be two temp file objects left in Received Folders.
+    // We clean those temp files here. 
+    TFileName filename;
+    TObexUtilsMessageHandler::RemoveTemporaryRFileL (filename);  
+    FLOG(_L("[SRCS]\tserver\tSrcs Initialize server complete."));
+    }
+
+// ---------------------------------------------------------
+// ManageServices
+// Initialise services according to parameter value.
+// ---------------------------------------------------------
+//
+TInt CObexSM::ManageServices(TSrcsTransport aTransport, TBool aState, 
+    MObexSMRequestObserver* aObserver, const RMessage2& aMessage)
+    {
+    FLOG(_L("[SRCS]\tserver\tSrcs ManageServicesL"));
+    // Simply forward call
+    return iServiceHandler->ManageServices( aTransport, aState, aObserver, aMessage);
+    }
+// ---------------------------------------------------------
+// IncSessionCount
+// Increase session count.
+// ---------------------------------------------------------
+//
+void CObexSM::IncSessionCount()
+    {
+    FLOG(_L("[SRCS]\tserver\tSrcs IncSessionCount"));                    
+    iSessionCount++;    
+    }
+// ---------------------------------------------------------
+// DecSessionCount
+// Decrease session count
+// ---------------------------------------------------------
+//    
+void CObexSM::DecSessionCount()
+    {
+    FLOG(_L("[SRCS]\tserver\tSrcs DecSessionCount"));                
+    if ( iSessionCount>0 )
+        {    
+        iSessionCount--;    
+        if (iSessionCount == 0)
+            {
+            FLOG(_L("[SRCS]\tserver\tSrcs StoppingServer"));            
+            CActiveScheduler::Stop();    
+            }        
+        }    
+    }
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/obexservicemanserver/src/obexsmmain.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-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:  Implementation of obexservicemanager core.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include "obexserviceman.h"
+#include "debug.h"
+#include "obexsm.h"
+
+
+// ---------------------------------------------------------
+// PanicClient
+//
+// RMessage2::Panic() also completes the message.
+//
+// ---------------------------------------------------------
+void PanicClient(const RMessage2& aMessage,TInt aPanic )
+    {
+    FTRACE(FPrint(_L("[SRCS]\tserver\tPanicClient: Reason = %d"), aPanic));
+    aMessage.Panic(KSrcsPanic,aPanic);
+    }
+
+// ---------------------------------------------------------
+// PanicServer
+//
+// Panic our own thread
+//
+// ---------------------------------------------------------
+void PanicServer(TInt aPanic)
+    {
+    FTRACE(FPrint(_L("[SRCS]\tserver\tPanicServer: Reason = %d"), aPanic));
+    User::Panic(KSrcsPanic, aPanic);
+    }
+
+
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+
+// ---------------------------------------------------------
+// RunServerL
+//
+// Perform all server initialisation, in particular creation
+// of the scheduler and server and then run the scheduler.
+// This is called from Srcs.exe (RunServer -method).
+//
+// ---------------------------------------------------------
+EXPORT_C void RunServerL()
+    {
+    FLOG(_L("[SRCS]\tclient\tSrcs RunServerL"));
+
+    // create and install the active scheduler we need
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+    
+    // create the server (leave it on the cleanup stack)
+    CleanupStack::PushL( CObexSM::NewL() );
+
+	
+	// naming the server thread after the server helps to debug panics
+	// ignore error - we tried the best we could
+		
+	User::RenameThread(KSrcsName); 
+		
+	
+	RProcess::Rendezvous(KErrNone);
+	
+   
+    FLOG(_L("[SRCS]\tclient\tSrcs RunServerL: Starting active scheduler..."));
+	CActiveScheduler::Start();
+
+    FLOG(_L("[SRCS]\tclient\tSrcs RunServerL: Done"));
+    //
+    // Cleanup the server and scheduler
+    CleanupStack::PopAndDestroy(2);
+    }
+
+
+
+
+
+TInt E32Main() //used in all case( WINS and TARGET)
+    {
+    __UHEAP_MARK;
+
+    CTrapCleanup* cleanup=CTrapCleanup::New();
+    TInt retVal = KErrNoMemory;
+    if ( cleanup )
+        {
+        TRAP( retVal,RunServerL() );
+        delete cleanup;
+        }
+
+    __UHEAP_MARKEND;
+    return retVal;
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 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: 
+*	 This file provides the information required for building the
+*    whole of a ?module_name.
+*
+*/
+
+
+PRJ_PLATFORMS
+
+
+PRJ_MMPFILES
+
+
+../group/obexservicemanbt.mmp
+../group/obexservicemanir.mmp
+../group/obexservicemanusb.mmp
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanbt.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2002 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: 
+*     This is project specification file for the SRCS BT Plug-in.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET		obexservicemanbt.dll
+
+TARGETTYPE	PLUGIN
+
+CAPABILITY	CAP_ECOM_PLUGIN
+VENDORID	VID_DEFAULT
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x101F7C9D
+
+SOURCEPATH  ../src/bt
+SOURCE      obexsmbtconnection.cpp 
+SOURCE      obexsmpasskey.cpp
+SOURCE      proxy.cpp
+
+
+START RESOURCE 101f7c9d.rss   
+  TARGET obexservicemanbt.rsc  
+END
+
+USERINCLUDE ../inc/bt ../../obexservicemanserver/inc ../../utils/inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib           // Base library
+LIBRARY ecom.lib			// ECom library
+LIBRARY irobex.lib          // For Object exchange
+LIBRARY charconv.lib        // For Unicode conversion
+DEBUGLIBRARY     flogger.lib         // For logging
+LIBRARY esock.lib           // Socket functionality
+LIBRARY bluetooth.lib       // For Bluetooth connection
+LIBRARY btengdiscovery.lib  // For Bluetooth discovery
+LIBRARY obexutils.lib		// opaque_data parser
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanir.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2003 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: 
+*     This is project specification file for the SRCS IrDA Plug-in.
+*
+*/
+
+#include <platform_paths.hrh>
+TARGET      obexservicemanir.dll
+
+TARGETTYPE	PLUGIN
+
+CAPABILITY	CAP_ECOM_PLUGIN
+VENDORID	VID_DEFAULT
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x101F9695
+
+
+SOURCEPATH  ../src/ir
+SOURCE      obexsmirdaconnection.cpp 
+SOURCE      proxy.cpp
+
+
+START RESOURCE 101F9695.rss
+  TARGET obexservicemanir.rsc  
+END
+
+USERINCLUDE ../inc/ir ../../obexservicemanserver/inc  ../../utils/inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib           // Base library
+LIBRARY ecom.lib	    // ECom library
+LIBRARY irda.lib	    // IrDA library
+LIBRARY irobex.lib          // For Object exchange
+DEBUGLIBRARY     flogger.lib         // For logging
+LIBRARY esock.lib           // Socket functionality
+LIBRARY obexutils.lib		// opaque_data parser
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanusb.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2002 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: 
+*     This is project specification file for the SRCS USB Plug-in.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET      obexservicemanusb.dll
+
+TARGETTYPE	PLUGIN
+
+CAPABILITY	CAP_ECOM_PLUGIN
+VENDORID	VID_DEFAULT
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x101F9693
+
+
+SOURCEPATH  ../src/usb
+SOURCE      obexsmusbconnection.cpp 
+SOURCE      proxy.cpp
+
+
+START RESOURCE 101F9693.rss   
+  TARGET obexservicemanusb.rsc  
+END
+
+USERINCLUDE ../inc/usb ../../obexservicemanserver/inc ../../utils/inc ../../inc
+SYSTEMINCLUDE  ../../../inc ../../../../inc  /epoc32/include/ecom
+MW_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY euser.lib           // Base library
+LIBRARY ecom.lib			// ECom library
+LIBRARY irobex.lib          // For Object exchange
+DEBUGLIBRARY     flogger.lib         // For logging
+LIBRARY obexutils.lib		// opaque_data parser
+LIBRARY centralrepository.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/bt/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2002 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: 
+*     Central place for nice debug-type macros & functions
+*
+*/
+
+
+#ifndef SRCS_DEBUG_H
+#define SRCS_DEBUG_H
+
+#ifdef _DEBUG
+
+// Enable this to enable memory tracing to SRCS
+//#define MEMTRACE
+
+// Following define is to enable OOM situations in SRCS
+// NOTE! SHOULD NEVER BE IN RELEASES
+//#define TEST_OOM
+
+#ifdef __WINS__
+
+// File logging for WIS
+#define __FLOGGING__
+
+#else
+
+// Logging with RDebug for target HW
+#define __CLOGGING__
+//#define __FLOGGING__
+
+
+#endif //__WINS__
+
+#endif
+
+#if defined ( __FLOGGING__ )
+
+_LIT(KLogFile,"Srcslog.txt");
+_LIT(KLogDir,"SRCS");
+
+#include <f32file.h>
+#include <flogger.h>
+
+#define FLOG(a) {FPrint(a);}
+
+#define FLOGHEX(value, len) {RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, "", " ",value, len);}
+
+#define FTRACE(a) {a;}
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+
+    // If memory tracing is activated.
+#ifdef MEMTRACE
+    TInt size;
+    User::Heap().AllocSize(size);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, _L("[SRCS]\tmemory\tMemory usage: %d high: %d"), size, User::Heap().Size());
+#endif
+}
+
+inline void FHex(const TUint8* aPtr, TInt aLen)
+{
+    RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen);
+}
+
+inline void FHex(const TDesC8& aDes)
+{
+    FHex(aDes.Ptr(), aDes.Length());
+}
+
+// RDebug logging
+#elif defined(__CLOGGING__)
+
+#include <e32svr.h>
+
+#define FLOG(a) {RDebug::Print(a);}
+
+#define FLOGHEX(a)
+
+#define FTRACE(a) {a;}
+
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+}
+
+
+#else   // No loggings --> reduced code size
+#define FLOG(a)
+#define FLOGHEX(a)
+#define FTRACE(a)
+
+#endif //_DEBUG
+
+#endif // SRCS_DEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/bt/obexsmbtconnection.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2002-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:  This class handles bt obex settings.
+*
+*/
+
+
+#ifndef _OBEXSMBTCONNECTION_H
+#define _OBEXSMBTCONNECTION_H
+
+//  INCLUDES
+#include <e32base.h>
+
+#include <obex.h>
+#include "SrcsTransport.h"
+#include "obexsmpasskey.h"
+#include "SrcsInterface.h"
+#include "btengdiscovery.h"
+#include "obexutilsopaquedata.h"
+
+// CLASS DECLARATION
+/**
+* Class to handle Bluetooth connection
+*/
+class CObexSMBtConnection: public CSrcsTransport
+    {
+public:
+
+   /**
+    * Two-phased constructor.
+    *
+	* @param	aInitParams initial parameters
+    */
+    static CObexSMBtConnection* NewL(TAny* aInitParams);
+
+   /**
+    * Destructor.
+    *
+    */
+    virtual ~CObexSMBtConnection();
+
+   /** 
+	* Check if OBEX service is still active.
+	*
+    * @return ETrue: OBEX service is still active.
+	*		  EFalse: OBEX service is inactive.
+	*/
+	TBool IsOBEXActive();
+
+private:
+
+   /**
+    * C++ default constructor.
+    */
+    CObexSMBtConnection();
+
+   /**
+    * Constructor.
+    *
+    * @param	aInitParams initial parameters
+	*/
+    CObexSMBtConnection(TAny* aInitParams);
+
+   /**
+    * Constructor
+    * registers to sdp and btmanager
+    * sets up the protocol stack
+    * creates new messagehandler
+    */
+    void ConstructL();
+
+   /**
+    * MObexAuthChallengeHandler implementation
+    */
+
+   /**
+    * Password for authenticated connection
+    *
+	* @param	aUserID		User ID.
+    */
+    void GetUserPasswordL( const TDesC& aUserID );
+
+private:
+    CObexServer*                iServer;             // Obex Server    
+    TSdpServRecordHandle        iSDPHandle;          // SDP handle for registrations
+    CObexSMPasskey*             iPasskey;            // Class to handle Obex passkey
+
+    CSrcsInterface*             iController;         // Service Controller callback
+    CImplementationInformation* iImplementationInfo; // Implementation Info    
+
+    TUint                       iServiceUid;         // short form service id, so we can unregister later
+    TUUID                       iServiceUUID;	     // 128-bit UUID for Nokia proprietory service
+    CBTEngDiscovery*            iBtDiscovery;        // Bteng discovery
+    };
+
+
+
+#endif      // SRCSBTCONNECTION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/bt/obexsmpasskey.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2002-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:  CObexSMPasskey definition
+*
+*/
+
+
+#ifndef _OBEXSMPASSKEY_H
+#define _OBEXSMPASSKEY_H
+
+#include <btnotif.h>
+
+class CObexServer;
+
+/**
+ *  Class to handle BT Obex Passkey events
+ */
+class CObexSMPasskey : public CActive
+    {
+public:
+    static CObexSMPasskey* NewL();
+    ~CObexSMPasskey();
+    
+    void StartPassKeyRequestL(CObexServer* aObexServer);
+    
+private:
+    CObexSMPasskey();
+    void Cleanup();
+
+private: // from CActive
+    void DoCancel();
+    void RunL();
+    TInt RunError(TInt aError);
+
+private:
+    RNotifier iNotif;               // For Obex passkey notifier
+    TObexPasskeyBuf iObexPasskey;   // Obex passkey
+    CObexServer* iObexServer;       // Obex Server
+    };
+
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/ir/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 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: 
+*     Central place for nice debug-type macros & functions
+*
+*/
+
+
+#ifndef SRCS_DEBUG_H
+#define SRCS_DEBUG_H
+
+#ifdef _DEBUG
+
+// Enable this to enable memory tracing
+// to SRCS
+//#define MEMTRACE
+
+// Following define is to enable OOM
+// situations in SRCS
+// NOTE! SHOULD NEVER BE IN RELEASES
+//#define TEST_OOM
+
+#ifdef __WINS__
+
+// File logging for WIS
+#define __FLOGGING__
+
+#else
+
+// Logging with RDebug for target HW
+#define __CLOGGING__
+//#define __FLOGGING__
+
+
+#endif //__WINS__
+
+#endif
+
+#if defined ( __FLOGGING__ )
+
+_LIT(KLogFile,"Srcslog.txt");
+_LIT(KLogDir,"SRCS");
+
+#include <f32file.h>
+#include <flogger.h>
+
+#define FLOG(a) {FPrint(a);}
+
+#define FLOGHEX(value, len) {RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, "", " ",value, len);}
+
+#define FTRACE(a) {a;}
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+
+    // If memory tracing is activated.
+#ifdef MEMTRACE
+    TInt size;
+    User::Heap().AllocSize(size);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, _L("[SRCS]\tmemory\tMemory usage: %d high: %d"), size, User::Heap().Size());
+#endif
+}
+
+inline void FHex(const TUint8* aPtr, TInt aLen)
+{
+    RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen);
+}
+
+inline void FHex(const TDesC8& aDes)
+{
+    FHex(aDes.Ptr(), aDes.Length());
+}
+
+// RDebug logging
+#elif defined(__CLOGGING__)
+
+#include <e32svr.h>
+
+#define FLOG(a) {RDebug::Print(a);}
+
+#define FLOGHEX(a)
+
+#define FTRACE(a) {a;}
+
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+}
+
+
+#else   // No loggings --> reduced code size
+#define FLOG(a)
+#define FLOGHEX(a)
+#define FTRACE(a)
+
+#endif //_DEBUG
+
+#endif // SRCS_DEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/ir/obexsmirdaconnection.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2002-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:  This class handles irda obex settings.
+*
+*/
+
+
+
+#ifndef _SRCSIRDACONNECTION_H
+#define _SRCSIRDACONNECTION_H
+
+//  INCLUDES
+#include <e32base.h>
+
+#include <obex.h>
+#include "SrcsTransport.h"
+#include "SrcsInterface.h"
+
+// CLASS DECLARATION
+
+/**
+ * Class to handle IRDA connection
+ */
+class CObexSMIrDAConnection: public CSrcsTransport
+    {
+public:
+
+   /**
+    * Two-phased constructor.
+	* @param	aInitParams initial parameters
+    */
+    static CObexSMIrDAConnection* NewL(TAny* aInitParams);
+
+   /**
+    * Destructor.
+    */
+    virtual ~CObexSMIrDAConnection();
+
+   /** 
+	* Check if OBEX service is still active.
+    * @return ETrue: OBEX service is still active.
+	*		  EFalse: OBEX service is inactive.
+	*/
+	TBool IsOBEXActive();
+
+private:
+
+   /**
+    * C++ default constructor.
+    */
+    CObexSMIrDAConnection();
+
+   /**
+    * Constructor.
+    *
+    * @param	aInitParams initial parameters
+	*/
+	CObexSMIrDAConnection(TAny* aInitParams);
+
+   /**
+    * Constructor
+    * Open IRDA connection and creates OBEX server.
+    */
+    void ConstructL();
+
+   /**
+    * MObexAuthChallengeHandler implementation
+    */
+
+   /**
+    * Password for authenticated connection
+    *
+	* @param	aUserID		User ID.
+    */
+    void GetUserPasswordL( const TDesC& aUserID );
+    
+    
+
+private:
+    CObexServer* iServer;                               // Obex Server
+    CSrcsInterface* iController;                        // Service Controller callback
+    CImplementationInformation* iImplementationInfo;    // Implementation Info    
+    };
+
+
+
+#endif      // _SRCSIRDACONNECTION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/usb/debug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 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: 
+*     Central place for nice debug-type macros & functions
+*
+*/
+
+
+#ifndef SRCS_DEBUG_H
+#define SRCS_DEBUG_H
+
+#ifdef _DEBUG
+
+// Enable this to enable memory tracing
+// to SRCS
+//#define MEMTRACE
+
+// Following define is to enable OOM
+// situations in SRCS
+// NOTE! SHOULD NEVER BE IN RELEASES
+//#define TEST_OOM
+
+#ifdef __WINS__
+
+// File logging for WIS
+#define __FLOGGING__
+
+#else
+
+// Logging with RDebug for target HW
+#define __CLOGGING__
+//#define __FLOGGING__
+
+
+#endif //__WINS__
+
+#endif
+
+#if defined ( __FLOGGING__ )
+
+_LIT(KLogFile,"Srcslog.txt");
+_LIT(KLogDir,"SRCS");
+
+#include <f32file.h>
+#include <flogger.h>
+
+#define FLOG(a) {FPrint(a);}
+
+#define FLOGHEX(value, len) {RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, "", " ",value, len);}
+
+#define FTRACE(a) {a;}
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+
+    // If memory tracing is activated.
+#ifdef MEMTRACE
+    TInt size;
+    User::Heap().AllocSize(size);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, _L("[SRCS]\tmemory\tMemory usage: %d high: %d"), size, User::Heap().Size());
+#endif
+}
+
+inline void FHex(const TUint8* aPtr, TInt aLen)
+{
+    RFileLogger::HexDump(KLogDir, KLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen);
+}
+
+inline void FHex(const TDesC8& aDes)
+{
+    FHex(aDes.Ptr(), aDes.Length());
+}
+
+// RDebug logging
+#elif defined(__CLOGGING__)
+
+#include <e32svr.h>
+
+#define FLOG(a) {RDebug::Print(a);}
+
+#define FLOGHEX(a)
+
+#define FTRACE(a) {a;}
+
+// Declare the FPrint function
+
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+{
+    VA_LIST list;
+    VA_START(list,aFmt);
+    TInt tmpInt = VA_ARG(list, TInt);
+    TInt tmpInt2 = VA_ARG(list, TInt);
+    TInt tmpInt3 = VA_ARG(list, TInt);
+    VA_END(list);
+    RDebug::Print(aFmt, tmpInt, tmpInt2, tmpInt3);
+}
+
+
+#else   // No loggings --> reduced code size
+#define FLOG(a)
+#define FLOGHEX(a)
+#define FTRACE(a)
+
+#endif //_DEBUG
+
+#endif // SRCS_DEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/inc/usb/obexsmusbconnection.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2002-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:  This class handles service connection settings.
+*
+*/
+
+
+
+#ifndef OBEXSMUSBCONNECTION_H
+#define OBEXSMUSBCONNECTION_H
+
+//  INCLUDES
+#include <e32base.h>
+
+
+#include <obex.h>
+#include "SrcsTransport.h"
+#include "SrcsInterface.h"
+
+
+// CLASS DECLARATION
+
+    
+/**
+ * Class to handle USB connection
+ */
+class CObexSMUsbConnection: public CSrcsTransport
+    {
+public:   
+   /**
+    * Two-phased constructor.
+	* @param	aInitParams initial parameters
+    */
+    static CObexSMUsbConnection* NewL(TAny* aInitParams);
+
+   /**
+    * Destructor.
+    */
+    virtual ~CObexSMUsbConnection();
+
+   /** 
+	* Check if OBEX service is still active.
+    * @return ETrue: OBEX service is still active.
+	*		  EFalse: OBEX service is inactive.
+	*/
+	TBool IsOBEXActive();
+	    
+   /** 
+    * Perform any outstanding initialization tasks
+    *
+    * @return none.
+    */
+   void PostInitializeL();
+
+private:
+
+   /**
+    * C++ default constructor.
+    */
+    CObexSMUsbConnection();
+
+   /**
+    * Constructor.
+    *
+    * @param	aInitParams initial parameters
+	*/
+    CObexSMUsbConnection(TAny* aInitParams);
+
+   /**
+    * Constructor
+    * registers to sdp and btmanager
+    * sets up the protocol stack
+    * creates new messagehandler
+    */
+    void ConstructL();
+
+   /**
+    * MObexAuthChallengeHandler implementation
+    */
+
+   /**
+    * Password for authenticated connection
+    *
+	* @param	aUserID		User ID.
+    */
+    void GetUserPasswordL( const TDesC& aUserID );
+    
+    
+
+private:
+    CObexServer* iServer;                               // Obex Server
+    CSrcsInterface* iController;                        // Service Controller callback
+    CImplementationInformation* iImplementationInfo;    // Implementation Info    
+    TUid iImplUid;
+    };
+
+#endif      // OBEXSMUSBCONNECTION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/bt/101f7c9d.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains all the resources for the SRCS BT transport plug-in.
+*
+*/
+
+
+#include "registryinfo.rh"
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x101F7C9D;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x101F7C9A;
+			implementations = 
+				{
+				// Info for CSrcsBTConnection
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x101F7C9C;
+					version_no = 1;
+					display_name = "Srcs Bluetooth Tranport";
+					default_data = "OBEX/BT";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/bt/obexsmbtconnection.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2002-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:  This class handles service connections.
+*
+*/
+
+
+// INCLUDE FILES
+#include <obexbttransportinfo.h>
+#include "obexsmbtconnection.h"
+#include "debug.h"
+
+_LIT( KBTProtocol, "RFCOMM" );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CObexSMBtConnection::CObexSMBtConnection()
+    {
+    }
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CObexSMBtConnection::CObexSMBtConnection(TAny* aInitParams)    
+    :iImplementationInfo((CImplementationInformation *)aInitParams),
+     iBtDiscovery(NULL)
+    {    
+    }
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CObexSMBtConnection::~CObexSMBtConnection()
+    {
+    // Cleanup
+    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection begin"));
+
+    if(iPasskey)
+        {
+        iPasskey->Cancel();
+	    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection passkey query cancelled."));
+        }
+            
+    if ( iBtDiscovery )
+        {
+        iBtDiscovery->DeleteSdpRecord( iSDPHandle );
+        delete iBtDiscovery;
+        }
+	    
+    FTRACE( FPrint( _L( "[SRCS] CSrcsBtConnection::~CSrcsBtConnection: UnregisterSDPSettingsL" ) ) );
+        
+
+    if(iServer)
+        {
+        iServer->Stop();
+	    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server stopped."));
+        }
+    // Delete OBEX Server
+    if (iServer)
+        {
+        delete iServer;
+        FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server deleted."));
+        iServer = NULL;
+        }
+    
+    // Delete passkey
+    delete iPasskey;
+    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection iPasskey deleted."));
+    iPasskey = NULL;
+
+    // Delete Service Controller callback
+    delete iController;
+    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection service controller deleted."));
+    iController = NULL;
+    }
+
+// ---------------------------------------------------------
+// NewL
+// ---------------------------------------------------------
+//
+CObexSMBtConnection* CObexSMBtConnection::NewL(TAny* aInitParams)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection: NewL"));
+    CObexSMBtConnection* self = new (ELeave) CObexSMBtConnection(aInitParams);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+
+// ---------------------------------------------------------
+// ConstructL
+// Method to create BT connections.
+// ---------------------------------------------------------
+//
+void CObexSMBtConnection::ConstructL()
+    {
+    TLex8 lex;
+    // Create service controller implementation object
+    iController = CSrcsInterface::NewL(iImplementationInfo->ImplementationUid());
+
+    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CSrcsInterface::NewL\t"));	
+	  iController->SetMediaType( ESrcsMediaBT );	
+    // parsing opaque_data in iImplementationInfo
+    TPtrC8 res_string = iImplementationInfo->OpaqueData();
+
+    CObexUtilsOpaqueData res_data(res_string);
+
+    TBuf8<KObexUtilsMaxOpaqueDataStringLen> op_LocalWho;
+    TUint	op_Protocol, op_Authenticate, op_Authorise, op_Encrypt;
+	  TUint	op_ReceiveMtu(KSRCSDefaultReceiveMtu), op_TransmitMtu(KSRCSDefaultTransmitMtu);
+
+    // skip 1st entry: USB interface string descriptor
+    User::LeaveIfError ( res_data.GetString(op_LocalWho) );
+
+    // get 2nd entry: OBEX local who
+    User::LeaveIfError ( res_data.GetString(op_LocalWho) );
+
+    // get 3rd to 7th entry
+
+	  // All service ID should be strings !
+	  TBuf8<KObexUtilsMaxOpaqueDataStringLen> serviceUUID;
+    User::LeaveIfError ( res_data.GetString(serviceUUID) );    
+    
+    FTRACE(FPrint(_L("[SRCS] CObexSMBtConnection::ConstructL() serviceUUID Length %d"), serviceUUID.Length()));
+    
+    if (serviceUUID.Length() < 6)
+        {
+        User::Leave( KErrArgument );
+        }
+            
+    lex.Assign(serviceUUID);
+    
+    User::LeaveIfError ( res_data.GetNumber(op_Protocol) );
+    User::LeaveIfError ( res_data.GetNumber(op_Authenticate) );
+    User::LeaveIfError ( res_data.GetNumber(op_Authorise) );
+    User::LeaveIfError ( res_data.GetNumber(op_Encrypt) );
+
+	// Get OBEX packet size:
+	if( res_data.GetNumber(op_ReceiveMtu) != KErrNone )
+		{
+		op_ReceiveMtu = KSRCSDefaultReceiveMtu; // restore default value in case it is modified;
+	    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: op_ReceiveMtu not specified.\t"));
+		}
+	
+	if( res_data.GetNumber(op_TransmitMtu) != KErrNone )
+		{
+		op_TransmitMtu = KSRCSDefaultTransmitMtu; // restore default value in case it is modified;
+	    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: op_TransmitMtu not specified.\t"));
+		}
+
+    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Successfully get all data from opaque_data.\t"));
+
+    // Create CBTEngDiscovery
+    
+    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CBTConnection::NewL\t"));
+
+    // For handling Obex Passkey note
+    iPasskey = CObexSMPasskey::NewL();
+    FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CSrcsPasskey::NewL\t"));
+
+    // For showing Error Notes
+    // iErrorUi = CErrorUI::NewL();
+
+    // set up the protocol stack...
+    TObexBluetoothProtocolInfo aObexBluetoothProtocolInfo;
+    aObexBluetoothProtocolInfo.iTransport = KBTProtocol ;
+
+	// Configure security setting
+	FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Setting Security\t"));
+	TBTServiceSecurity sec;
+	sec.SetAuthentication(op_Authenticate);
+	sec.SetAuthorisation(op_Authorise);
+	sec.SetEncryption(op_Encrypt);
+	
+	TUint32 serviceUID;
+	lex.Inc(2);
+	lex.Val(serviceUID,EHex);
+	sec.SetUid(TUid::Uid(serviceUID));
+	aObexBluetoothProtocolInfo.iAddr.SetSecurity(sec);	
+	if (serviceUUID.Length() == 34)
+	    {
+	    TUint32 HH; TUint32 HL; TUint32 LH; TUint32 LL;
+	    lex = serviceUUID.Mid(2, 8);
+	    lex.Val(HH, EHex);
+	    lex = serviceUUID.Mid(10, 8);
+	    lex.Val(HL, EHex);
+	    lex = serviceUUID.Mid(18, 8);
+	    lex.Val(LH, EHex);
+	    lex = serviceUUID.Mid(26, 8);
+	    lex.Val(LL, EHex);
+        iServiceUUID = TUUID(HH, HL, LH, LL);
+	    }
+	else
+	    {
+	    iServiceUUID = TUUID(serviceUID);
+	    }
+
+	// Configure Obex packet size
+	TObexProtocolPolicy aObexProtocolPolicy;
+	aObexProtocolPolicy.SetReceiveMtu( static_cast<TUint16>(op_ReceiveMtu) );
+	aObexProtocolPolicy.SetTransmitMtu( static_cast<TUint16>(op_TransmitMtu) );
+	FTRACE(FPrint(_L("[SRCS] CSrcsBtConnection: ConstructL: op_ReceiveMtu[%x] op_TransmitMtu[%x]"), 
+		aObexProtocolPolicy.ReceiveMtu(), aObexProtocolPolicy.TransmitMtu() ));
+
+	// try to find a available channel to start OBEX server.
+    TUint channel=KRfcommPassiveAutoBind;
+    
+	aObexBluetoothProtocolInfo.iAddr.SetPort( channel );	
+    TRAPD(err,iServer = CObexServer::NewL(aObexBluetoothProtocolInfo, aObexProtocolPolicy);)
+	// Try to start server on this channel
+    if ( err == KErrNone )
+	    {
+	    err=iController->SetObexServer( iServer );   
+		if ( err == KErrNone )
+		    {			
+			// Set authentication handler
+			iServer->SetCallBack( *this );
+			//If there is "local who" field, set it to OBEX server.
+			if(op_LocalWho.Size())
+			    {
+				User::LeaveIfError ( iServer->SetLocalWho( op_LocalWho ) );
+				FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: SetLocalWho\t"));
+				}
+			FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: SetObexServer\t"));
+		
+		    // Register SDP settings
+		    
+		    TObexBtTransportInfo *info=(TObexBtTransportInfo*)iServer->TransportInfo();
+		    channel=info->iAddr.Port();  		    
+		    FTRACE(FPrint(_L("[SRCS] CSrcsBtConnection: ConstructL: CObexServer started on channel %d"), channel));			
+		    iBtDiscovery = CBTEngDiscovery::NewL();		    
+			User::LeaveIfError ( iBtDiscovery->RegisterSdpRecord(iServiceUUID, channel, iSDPHandle ));				                
+			}
+		else
+		    {
+			// Failed to start Obex server. Delete server and try again
+			FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Failed to start Obex server. Delete server and try again.\t"));
+			delete iServer;
+			iServer = NULL;
+			}
+		}
+    if ( !iServer )
+        {
+        // Server did not start.
+        FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Failed to start Obex server. Leave now! \t"));
+        User::Leave( KErrGeneral );
+        }
+    
+    }
+
+// ---------------------------------------------------------
+// GetUserPasswordL(const TDesC& )
+// Purpose: Get the Obex password from user with ObexPasskeyNotifier
+// Parameters:
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMBtConnection::GetUserPasswordL( const TDesC& )
+    {
+    FLOG( _L( "[SRCS] CSrcsBtConnection: GetUserPassword\t" ) );
+    iPasskey->StartPassKeyRequestL( iServer );
+    }
+
+// ---------------------------------------------------------
+// Check if OBEX service is still active.
+// @return ETrue:  OBEX service is still active.
+//  	   EFalse: OBEX service is inactive.
+// ---------------------------------------------------------
+//
+TBool CObexSMBtConnection::IsOBEXActive()
+	{
+    FLOG( _L( "[SRCS] CSrcsBtConnection: IsOBEXActive\t" ) );
+	return ETrue;	
+	}
+	
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/bt/obexsmpasskey.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2002-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:  Class to handle Obexpasskey queries
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "obexsmpasskey.h"
+#include <obex.h>
+#include <utf.h>
+#include "debug.h"
+
+
+CObexSMPasskey::CObexSMPasskey()
+    : CActive(CActive::EPriorityStandard)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CObexSMPasskey* CObexSMPasskey::NewL()
+    {
+    CObexSMPasskey* self = new (ELeave) CObexSMPasskey;
+    return self;
+    }
+
+CObexSMPasskey::~CObexSMPasskey()
+    {
+    Cancel();
+    iNotif.Close();
+    FLOG( _L( "[SRCS] CObexSMPasskey: ~CObexSMPasskey" ) );
+    }
+
+void CObexSMPasskey::Cleanup()
+    {
+    iNotif.CancelNotifier( KBTObexPasskeyQueryNotifierUid );
+    iNotif.Close();
+    }
+
+// ---------------------------------------------------------
+// DoCancel()
+// Purpose: Cancels ObexPasskey notifier
+// Parameters:
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMPasskey::DoCancel()
+    {
+    Cleanup();
+    FLOG( _L( "[SRCS] CObexSMPasskey: DoCancel" ) );
+    }
+
+// ---------------------------------------------------------
+// RunL()
+// Purpose: Handles ObexPasskey notifiers return value
+// Parameters:
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMPasskey::RunL()
+    {
+    if ( iStatus.Int() != KErrNone )
+        {
+        FLOG( _L( "[SRCS] CObexSMPasskey: RunL::Cancel\t" ) );
+        User::Leave(KErrCancel);
+        }
+    
+    TBuf<KBTObexPasskeyMaxLength> tempResultBuffer;
+    CnvUtfConverter::ConvertToUnicodeFromUtf8( tempResultBuffer, iObexPasskey() );
+    iObexServer->UserPasswordL( tempResultBuffer );
+    FLOG( _L( "[SRCS] CObexSMPasskey: RunL ObexPasskey returned\t" ) );
+    
+    Cleanup();
+    }
+
+// ---------------------------------------------------------
+// RunError( TInt aError )
+// Purpose: Handle error cases
+// Parameters: TInt
+// Return value: error value
+// ---------------------------------------------------------
+//
+TInt CObexSMPasskey::RunError( TInt aError )
+    {
+    FTRACE(FPrint(_L("[SRCS] CObexSMPasskey: RunError: aError = %d"), aError));
+    Cleanup();
+    iObexServer->Error(aError); // Ensure that OBEX is kept informed of the problem.
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// StartPassKeyRequestL( CObexServer* aObexServer )
+// Purpose: Starts ObexPasskey notifier
+// Parameters: CObexServer*
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMPasskey::StartPassKeyRequestL( CObexServer* aObexServer )
+    {
+    FLOG( _L( "[SRCS] CObexSMPasskey: StartPassKeyRequest" ) );
+    User::LeaveIfError( iNotif.Connect() );
+    TPtrC8 dummy( KNullDesC8 );
+    // Starts notifier and gets the passkey for Obex
+    iNotif.StartNotifierAndGetResponse( iStatus, KBTObexPasskeyQueryNotifierUid, dummy, iObexPasskey );
+    iObexServer = aObexServer;
+    SetActive();
+    FLOG( _L( "[SRCS] CObexSMPasskey: SetActive" ) );
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/bt/proxy.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002-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:  This class export ECom interface implementations.
+*
+*/
+
+
+#include <e32std.h>
+#include <implementationproxy.h>
+
+#include "obexsmbtconnection.h"
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+    	IMPLEMENTATION_PROXY_ENTRY(0x101F7C9C,	CObexSMBtConnection::NewL)
+        //{{0x101F7C9C},	CSrcsBtConnection::NewL},
+    };
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/ir/101F9695.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains all the resources for the SRCS IrDA transport plug-in.
+*
+*/
+
+
+#include "registryinfo.rh"
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x101F9695;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x101F7C9A;
+			implementations = 
+				{
+				// Info for CSrcsBTConnection
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x101F9694;
+					version_no = 1;
+					display_name = "Srcs IrDA Tranport";
+					default_data = "OBEX/IrDA";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/ir/obexsmirdaconnection.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2002-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:  This class handles service connections.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "obexsmirdaconnection.h"
+#include "debug.h"
+#include "obexutilsopaquedata.h"
+
+const TUint16 KMaxMtuSize    = 0x7FFF;  // 32kB-1
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CObexSMIrDAConnection::CObexSMIrDAConnection()
+    {
+    }
+// ---------------------------------------------------------    
+//  Constructor
+// ---------------------------------------------------------
+//
+CObexSMIrDAConnection::CObexSMIrDAConnection(TAny* aInitParams)        
+    :iImplementationInfo((CImplementationInformation *)aInitParams)
+    {    
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CObexSMIrDAConnection::~CObexSMIrDAConnection()
+    {
+    // Cleanup
+    FLOG(_L("[SRCS]\tserver\tCSrcsIrDAConnection::~CSrcsIrDAConnection"));
+    if(iServer)
+        {
+        iServer->Stop();
+	    FLOG(_L("[SRCS]\tserver\tCSrcsIrDAConnection::~CSrcsIrDAConnection: OBEX server stopped."));
+        }
+	
+    // Delete OBEX Server
+    if (iServer)
+        {
+        delete iServer;
+        FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server deleted."));
+        iServer = NULL;
+        }
+
+    // Delete Service Controller callback
+    delete iController;
+    FLOG(_L("[SRCS]\tserver\tCSrcsIrDAConnection::~CSrcsIrDAConnection: service controller deleted."));
+    iController = NULL;
+
+    FLOG(_L("[SRCS]\tserver\tCSrcsIrDAConnection::~CSrcsIrDAConnection finished."));
+    }
+
+// ---------------------------------------------------------
+// NewL
+// ---------------------------------------------------------
+//
+CObexSMIrDAConnection* CObexSMIrDAConnection::NewL(TAny* aInitParams)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsIrDAConnection: NewL"));
+    CObexSMIrDAConnection* self = new (ELeave) CObexSMIrDAConnection(aInitParams);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+
+// ---------------------------------------------------------
+// ConstructL
+// Method to create IrDA connections.
+// ---------------------------------------------------------
+//
+void CObexSMIrDAConnection::ConstructL()
+    {
+
+    // Create service controller implementation object
+    iController = CSrcsInterface::NewL(iImplementationInfo->ImplementationUid());
+    FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: CSrcsInterface::NewL\t"));
+
+	iController->SetMediaType( ESrcsMediaIrDA );
+
+	//Start service controller state machine.
+	iController->IsOBEXActive();
+
+    // parsing opaque_data in iImplementationInfo
+    TPtrC8 res_string = iImplementationInfo->OpaqueData();
+
+    CObexUtilsOpaqueData res_data(res_string);
+    TBuf8<KObexUtilsMaxOpaqueDataStringLen> op_StringDesc, op_LocalWho, op_SkipStr;
+    TUint	op_SkipInt; //used to skip certain fields
+	TUint	op_ReceiveMtu(KSRCSDefaultReceiveMtu), op_TransmitMtu(KSRCSDefaultTransmitMtu);
+
+    // get 1st entry: USB interface string descriptor
+    User::LeaveIfError ( res_data.GetString(op_StringDesc) );
+
+    // get 2nd entry: OBEX local who
+    User::LeaveIfError ( res_data.GetString(op_LocalWho) );
+
+    // skip 3rd to 7th entry
+	// All service ID should be strings !
+    res_data.GetString(op_SkipStr);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);
+
+	// Get OBEX packet size:
+	if( res_data.GetNumber(op_ReceiveMtu) != KErrNone )
+		{
+		op_ReceiveMtu = KSRCSDefaultReceiveMtu; // restore default value in case it is modified;		
+	  FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: op_ReceiveMtu not specified.\t"));
+		}
+	
+	if( res_data.GetNumber(op_TransmitMtu) != KErrNone )
+		{
+		op_TransmitMtu = KSRCSDefaultTransmitMtu; // restore default value in case it is modified;
+	  FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: op_TransmitMtu not specified.\t"));
+		}
+		//limit max mtu size to 32kB-1
+		if (op_ReceiveMtu>KMaxMtuSize)
+		  {
+		  op_ReceiveMtu=KMaxMtuSize;
+		  }
+		if (op_TransmitMtu>KMaxMtuSize)
+		  {
+		  op_TransmitMtu=KMaxMtuSize;  
+		  }  
+
+    FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: Successfully get all data from opaque_data.\t"));
+
+    // set up the protocol stack...
+    TObexIrProtocolInfo aInfo;
+
+    aInfo.iTransport = KObexIrTTPProtocol; //"IrTinyTP" from obex.h
+    aInfo.iClassName.Copy(op_StringDesc);
+	aInfo.iAttributeName = _L8("IrDA:TinyTP:LsapSel");;
+
+	// Configure Obex packet size
+	TObexProtocolPolicy aObexProtocolPolicy;
+	aObexProtocolPolicy.SetReceiveMtu( static_cast<TUint16>(op_ReceiveMtu) );
+	aObexProtocolPolicy.SetTransmitMtu( static_cast<TUint16>(op_TransmitMtu) );
+	FTRACE(FPrint(_L("[SRCS] CSrcsIrDAConnection: ConstructL: op_ReceiveMtu[%x] op_TransmitMtu[%x]"), 
+		aObexProtocolPolicy.ReceiveMtu(), aObexProtocolPolicy.TransmitMtu() ));
+
+	// try to find a available port to start OBEX server.
+    TUint port=KAutoBindLSAP;    
+	// create obex server
+		
+	aInfo.iAddr.SetPort( port );
+	TRAPD(err,iServer = CObexServer::NewL(aInfo, aObexProtocolPolicy);)
+
+	// Try to start server on this port
+	if ( err == KErrNone )
+	    {    	
+	    FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: SetObexServer\t"));
+		err=iController->SetObexServer( iServer );
+		FTRACE(FPrint(_L("[SRCS] CSrcsIrDAConnection: ConstructL: CObexServer started on port %d"), port));		
+		
+		if (err!=KErrNone)
+	    	{
+			// Failed to start Obex server. Delete server and try again
+			delete iServer;
+			iServer = NULL;
+			}
+		}
+		
+
+	if ( !iServer )
+        {
+        // Server did not start.
+        FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: Failed to start Obex server\t"));
+        User::Leave( KErrGeneral );
+        }
+	else
+		{
+		// if there is "local who" field
+		if(op_LocalWho.Size())
+			{
+			User::LeaveIfError ( iServer->SetLocalWho( op_LocalWho ) );
+			FLOG(_L("[SRCS] CSrcsIrDAConnection: ConstructL: SetLocalWho"));
+			}
+		}
+    }
+
+// ---------------------------------------------------------
+// GetUserPasswordL(const TDesC& )
+// Purpose: Get the Obex password from user with ObexPasskeyNotifier
+// Parameters:
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMIrDAConnection::GetUserPasswordL( const TDesC& )
+    {
+    FLOG( _L( "[SRCS] CSrcsIrDAConnection: GetUserPassword\t" ) );
+    }
+
+// ---------------------------------------------------------
+// Check if OBEX service is still active.
+// @return ETrue:  OBEX service is still active.
+//  	   EFalse: OBEX service is inactive.
+// ---------------------------------------------------------
+//
+
+TBool CObexSMIrDAConnection::IsOBEXActive()
+	{
+    FLOG( _L( "[SRCS] CSrcsIrDAConnection: IsOBEXActive\t" ) );
+	return iController->IsOBEXActive();
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/ir/proxy.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2002-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:  This class export ECom interface implementations.
+*
+*/
+
+
+
+#include <e32std.h>
+#include <implementationproxy.h>
+
+#include "obexsmirdaconnection.h"
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+    	IMPLEMENTATION_PROXY_ENTRY(0x101F9694,	CObexSMIrDAConnection::NewL)
+        //{{0x101F9694},	CSrcsIrDAConnection::NewL},
+    };
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/usb/101F9693.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains all the resources for the SRCS USB transport plug-in.
+*
+*/
+
+
+#include "registryinfo.rh"
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x101F9693;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of SRCS Transport interface
+			interface_uid = 0x101F7C9A;
+			implementations = 
+				{
+				// Info for CSrcsUSBConnection
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x101F9692;
+					version_no = 1;
+					display_name = "Srcs USB Tranport";
+					default_data = "OBEX/USB";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/usb/obexsmusbconnection.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2002-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:  This class handles service connections.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "obexsmusbconnection.h"
+#include "debug.h"
+#include <d32usbc.h>
+#include "obexutilsopaquedata.h"
+#include <centralrepository.h>
+#include "obexservicemanprivatecrkeys.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CObexSMUsbConnection::CObexSMUsbConnection()
+    {
+    }
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CObexSMUsbConnection::CObexSMUsbConnection(TAny* aInitParams)        
+    :iImplementationInfo((CImplementationInformation *)aInitParams)
+    {    
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CObexSMUsbConnection::~CObexSMUsbConnection()
+    {
+    // Cleanup       
+    FLOG(_L("[SRCS] CSrcsUsbConnection: StopObexServer"));              
+    if(iServer)
+        {
+        iServer->Stop();
+        }
+	
+    // Delete OBEX Server    
+    if (iServer)
+        {
+        delete iServer;
+        FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server deleted."));
+        iServer = NULL;
+        }
+    
+    // Delete Service Controller callback
+    delete iController;
+    iController = NULL;    
+    
+    FLOG(_L("[SRCS] CSrcsUsbConnection: ~CSrcsUsbConnection: Completed\t"));    
+    }
+
+// ---------------------------------------------------------
+// NewL
+// ---------------------------------------------------------
+//
+CObexSMUsbConnection* CObexSMUsbConnection::NewL(TAny* aInitParams)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsUsbConnection: NewL"));
+    CObexSMUsbConnection* self = new (ELeave) CObexSMUsbConnection(aInitParams);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+
+// ---------------------------------------------------------
+// ConstructL
+// Method to create BT connections.
+// ---------------------------------------------------------
+//
+void CObexSMUsbConnection::ConstructL()
+    {    
+    // Save service controller implementation UID for deferred initialization
+    iImplUid = iImplementationInfo->ImplementationUid();
+
+    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: CSrcsInterface::NewL\t"));
+
+    // parsing opaque_data in iImplementationInfo
+    TPtrC8 res_string = iImplementationInfo->OpaqueData();
+    
+    CObexUtilsOpaqueData res_data(res_string);
+    TBuf8<KObexUtilsMaxOpaqueDataStringLen> op_StringDesc, op_LocalWho, op_SkipStr;
+    TUint	op_SkipInt; //used to skip certain fields
+	TUint	op_ReceiveMtu(KSRCSDefaultReceiveMtu), op_TransmitMtu(KSRCSDefaultTransmitMtu);    
+    // get 1st entry: USB interface string descriptor    
+	User::LeaveIfError ( res_data.GetString(op_StringDesc) );    
+    // get 2nd entry: OBEX local who
+    User::LeaveIfError ( res_data.GetString(op_LocalWho) );    
+    // skip 3rd to 7th entry
+	// All service ID should be strings !
+    res_data.GetString(op_SkipStr);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);
+    res_data.GetNumber(op_SkipInt);    
+
+	// Get OBEX packet size:
+	if( res_data.GetNumber(op_ReceiveMtu) != KErrNone )
+		{
+		op_ReceiveMtu = KSRCSDefaultReceiveMtu; // restore default value in case it is modified;
+	    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: op_ReceiveMtu not specified.\t"));
+		}
+	
+	if( res_data.GetNumber(op_TransmitMtu) != KErrNone )
+		{
+		op_TransmitMtu = KSRCSDefaultTransmitMtu; // restore default value in case it is modified;
+	    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: op_TransmitMtu not specified.\t"));
+		}   
+
+    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: Successfully get all data from opaque_data.\t"));
+
+	// Get OBEX usb dma usage
+    CRepository* cenrep = NULL;
+    TRAP_IGNORE(cenrep = CRepository::NewL(KCRUidObexServiceMan));
+    TInt dmaUsage = EObexUsbDmaInUse;
+    if (cenrep)
+        {
+        cenrep->Get(KObexUsbDmaUsage, dmaUsage);
+        delete cenrep;
+        }
+
+	// set up the protocol stack...    
+    TObexUsbProtocolInfoV2 obexUsbProtocolInfo;
+    obexUsbProtocolInfo.iTransport = KObexUsbProtocolV2;
+    obexUsbProtocolInfo.iInterfaceStringDescriptor.Copy(op_StringDesc);
+    if(dmaUsage == EObexUsbDmaInUse)
+	    {
+	    obexUsbProtocolInfo.iDmaOnInEndpoint = ETrue;
+	    obexUsbProtocolInfo.iDmaOnOutEndpoint = ETrue;
+	    }
+	 else
+	 	{
+	 	obexUsbProtocolInfo.iDmaOnInEndpoint = EFalse;
+	    obexUsbProtocolInfo.iDmaOnOutEndpoint = EFalse;
+	 	}	
+    obexUsbProtocolInfo.iBandwidthPriority = EUsbcBandwidthOUTPlus2 | EUsbcBandwidthINPlus2;
+
+
+
+	// Configure Obex packet size
+	TObexProtocolPolicy aObexProtocolPolicy;
+	aObexProtocolPolicy.SetReceiveMtu( static_cast<TUint16>(op_ReceiveMtu) );
+	aObexProtocolPolicy.SetTransmitMtu( static_cast<TUint16>(op_TransmitMtu) );
+	FTRACE(FPrint(_L("[SRCS] CSrcsUsbConnection: ConstructL: op_ReceiveMtu[%x] op_TransmitMtu[%x]"), 
+		aObexProtocolPolicy.ReceiveMtu(), aObexProtocolPolicy.TransmitMtu() ));
+
+	// Try to create OBEX server
+	iServer = CObexServer::NewL(obexUsbProtocolInfo, aObexProtocolPolicy);
+    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: CObexServer::NewL"));
+    // if there is "local who" field
+    if(op_LocalWho.Size())
+        {
+        User::LeaveIfError ( iServer->SetLocalWho( op_LocalWho ) );
+        FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: SetLocalWho"));
+        }
+    
+    // The rest of initialization procedure is executed in PostInitialzeL()
+    }
+
+// ---------------------------------------------------------
+// GetUserPasswordL(const TDesC& )
+// Purpose: Get the Obex password from user with ObexPasskeyNotifier
+// Parameters:
+// Return value:
+// ---------------------------------------------------------
+//
+void CObexSMUsbConnection::GetUserPasswordL( const TDesC& )
+    {
+    FLOG( _L( "[SRCS] CSrcsUsbConnection: GetUserPassword\t" ) );
+    }
+
+// ---------------------------------------------------------
+// Check if OBEX service is still active.
+// @return ETrue:  OBEX service is still active.
+//  	   EFalse: OBEX service is inactive.
+// ---------------------------------------------------------
+//
+
+TBool CObexSMUsbConnection::IsOBEXActive()
+	{
+    FLOG( _L( "[SRCS] CSrcsUsbConnection: IsOBEXActive\t" ) );
+	return ETrue;	
+	}     
+
+void CObexSMUsbConnection::PostInitializeL()
+    {
+    FTRACE(FPrint(_L("[SRCS] CObexSMUsbConnection: PostInitializeL(%08X)"), iImplUid.iUid));
+
+    iController = CSrcsInterface::NewL(iImplUid);
+    iController->SetMediaType( ESrcsMediaUSB );
+
+    FLOG(_L("[SRCS] CObexSMUsbConnection::PostInitializeL(): SetObexServer\t"));
+    // Try to start server 
+    User::LeaveIfError ( iController->SetObexServer( iServer ));
+    FLOG( _L( "[SRCS] CObexSMUsbConnection: PostInitializeL() exits\t" ) );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/plugins/src/usb/proxy.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002-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:  This class export ECom interface implementations.
+*
+*/
+
+
+#include <e32std.h>
+#include <implementationproxy.h>
+
+#include "obexsmusbconnection.h"
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+    	IMPLEMENTATION_PROXY_ENTRY(0x101F9692,	CObexSMUsbConnection::NewL)
+        //{{0x101F9692},	CSrcsUsbConnection::NewL},
+    };
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/ObexUtils.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2002 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 non localizable elements
+*
+*/
+
+
+#ifndef __OBEXUTILS_IBY__
+#define __OBEXUTILS_IBY__
+
+file=ABI_DIR\BUILD_DIR\obexutils.dll             SHARED_LIB_DIR\obexutils.dll
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/ObexUtilsResources.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2002 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 localizable elements (resources of ObexUtils
+*                library
+*
+*/
+
+
+#ifndef OBEXUTILSRESOURCES_IBY
+#define OBEXUTILSRESOURCES_IBY
+
+data=DATAZ_\RESOURCE_FILES_DIR\obexutils.rsc   	RESOURCE_FILES_DIR\obexutils.rsc
+
+#endif
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/obex.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2001-2005 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 __OBEX_IBY__
+#define __OBEX_IBY__
+
+#ifdef SYMBIAN_EXCLUDE_OBEX
+REM Messaging OBEX MTM is not included in this ROM, because it depends on excluded OBEX
+#else
+
+// generic OBEX Modules
+file=ABI_DIR\BUILD_DIR\obexservermtm.dll                 System\libs\obexservermtm.dll 
+file=ABI_DIR\BUILD_DIR\obexclientmtm.dll                 System\libs\obexclientmtm.dll 
+file=ABI_DIR\BUILD_DIR\obexmtmutil.dll                   System\libs\obexmtmutil.dll 
+
+// test harness support libraries
+//file=ABI_DIR\BUILD_DIR\msvtestutils.dll                  System\libs\msvtestutils.dll 
+//file=ABI_DIR\BUILD_DIR\msgth.dll                         System\libs\msgth.dll 
+
+
+#ifdef SYMBIAN_EXCLUDE_INFRARED
+REM Messaging infrared MTM is not included in this ROM, because it depends on excluded INFRARED
+#else
+//IR MTM Client
+file=ABI_DIR\BUILD_DIR\irc.dll                        System\libs\irc.dll 
+
+//IR MTM Server
+file=ABI_DIR\BUILD_DIR\irs.dll                        System\libs\irs.dll 
+
+//IR MTM Resources
+
+#endif // SYMBIAN_EXCLUDE_INFRARED
+
+
+#ifdef SYMBIAN_EXCLUDE_BLUETOOTH
+REM Messaging Bluetooth MTM is not included in this ROM, because it depends on excluded BLUETOOTH
+#else
+//BT MTM Client
+file=ABI_DIR\BUILD_DIR\btcmtm.dll                        System\libs\btcmtm.dll 
+
+//BT MTM Server
+file=ABI_DIR\BUILD_DIR\btsmtm.dll                        System\libs\btsmtm.dll 
+
+//BT MTM Resources
+
+#endif // SYMBIAN_EXCLUDE_BLUETOOTH
+
+
+//Test Harness Executable
+//file=ABI_DIR\BUILD_DIR\T_ObexMTM.exe                     System\Samples\T_ObexMTM.exe 
+
+#endif // SYMBIAN_EXCLUDE_OBEX
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/obexserviceman.iby	Fri May 28 17:03:06 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:
+*
+*/
+
+#ifndef OBEXSERVICEMANCLIENT_IBY
+#define OBEXSERVICEMANCLIENT_IBY
+
+
+ECOM_PLUGIN(obexserviceman.dll,obexserviceman.rsc)
+file=ABI_DIR\BUILD_DIR\obexserviceman.exe			PROGRAMS_DIR\obexserviceman.exe
+file=ABI_DIR\BUILD_DIR\obexusbapi.dll				PROGRAMS_DIR\obexusbapi.dll
+data=ZPRIVATE\101F7C87\backup_registration.xml		private\101F7C87\backup_registration.xml
+
+#endif // OBEXSERVICEMANCLIENT_IBY
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/obexservicemanbt.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __SRCSBT_IBY__
+#define __SRCSBT_IBY__
+//file content
+
+#ifdef __BT
+
+ECOM_PLUGIN(obexservicemanbt.dll,101F7C9D.rsc)
+
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/obexservicemanirda.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __SRCSIRDA_IBY__
+#define __SRCSIRDA_IBY__
+
+#ifdef __IRDA
+ECOM_PLUGIN(obexservicemanir.dll, 101F9695.rsc)
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/rom/obexservicemanusb.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __SRCSUSB_IBY__
+#define __SRCSUSB_IBY__
+//file content
+
+#ifdef __USB
+ECOM_PLUGIN(obexservicemanusb.dll,101F9693.rsc)
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/bmarm/OBEXUTILSU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,28 @@
+EXPORTS
+	UpdateProgressDialogL__16CObexUtilsDialogii @ 1 NONAME R3UNUSED ; CObexUtilsDialog::UpdateProgressDialogL(int, int)
+	CancelWaitDialogL__16CObexUtilsDialog @ 2 NONAME R3UNUSED ; CObexUtilsDialog::CancelWaitDialogL(void)
+	ContextIcon__17TObexUtilsUiLayerRC9TMsvEntry13TContextMedia @ 3 NONAME R3UNUSED ; TObexUtilsUiLayer::ContextIcon(TMsvEntry const &, TContextMedia)
+	CreateOutboxEntryL__24TObexUtilsMessageHandlerRC4TUidRCi @ 4 NONAME R3UNUSED ; TObexUtilsMessageHandler::CreateOutboxEntryL(TUid const &, int const &)
+	DeleteOutboxEntryL__24TObexUtilsMessageHandlerRCl @ 5 NONAME R3UNUSED ; TObexUtilsMessageHandler::DeleteOutboxEntryL(long const &)
+	GetFileSystemStatus__24TObexUtilsMessageHandler @ 6 NONAME R3UNUSED ; TObexUtilsMessageHandler::GetFileSystemStatus(void)
+	GetMmcFileSystemStatus__24TObexUtilsMessageHandler @ 7 NONAME R3UNUSED ; TObexUtilsMessageHandler::GetMmcFileSystemStatus(void)
+	LaunchEditorApplicationL__17TObexUtilsUiLayerP9CMsvEntryR11CMsvSession @ 8 NONAME R3UNUSED ; TObexUtilsUiLayer::LaunchEditorApplicationL(CMsvEntry *, CMsvSession &)
+	LaunchProgressDialogL__16CObexUtilsDialogP26MObexUtilsProgressObserveriii @ 9 NONAME ; CObexUtilsDialog::LaunchProgressDialogL(MObexUtilsProgressObserver *, int, int, int)
+	LaunchWaitDialogL__16CObexUtilsDialogi @ 10 NONAME R3UNUSED ; CObexUtilsDialog::LaunchWaitDialogL(int)
+	NewLC__16CObexUtilsDialogP24MObexUtilsDialogObserver @ 11 NONAME R3UNUSED ; CObexUtilsDialog::NewLC(MObexUtilsDialogObserver *)
+	NewL__16CObexUtilsDialogP24MObexUtilsDialogObserver @ 12 NONAME R3UNUSED ; CObexUtilsDialog::NewL(MObexUtilsDialogObserver *)
+	OperationNotSupported__17TObexUtilsUiLayer @ 13 NONAME R3UNUSED ; TObexUtilsUiLayer::OperationNotSupported(void)
+	ReadResourceL__17TObexUtilsUiLayerR6TDes16RCi @ 14 NONAME R3UNUSED ; TObexUtilsUiLayer::ReadResourceL(TDes16 &, int const &)
+	SaveObjToInboxL__24TObexUtilsMessageHandlerP14CObexBufObjectRC7TDesC16G4TUid @ 15 NONAME R3UNUSED ; TObexUtilsMessageHandler::SaveObjToInboxL(CObexBufObject *, TDesC16 const &, TUid)
+	ShowErrorNoteL__17TObexUtilsUiLayerRCi @ 16 NONAME R3UNUSED ; TObexUtilsUiLayer::ShowErrorNoteL(int const &)
+	ShowInformationNoteL__17TObexUtilsUiLayerRCi @ 17 NONAME R3UNUSED ; TObexUtilsUiLayer::ShowInformationNoteL(int const &)
+	UpdateBitmaps__17TObexUtilsUiLayerG4TUidRiRt4TBuf1i256T2T2 @ 18 NONAME ; TObexUtilsUiLayer::UpdateBitmaps(TUid, int &, TBuf<256> &, int &, int &)
+	CancelProgressDialogL__16CObexUtilsDialog @ 19 NONAME R3UNUSED ; CObexUtilsDialog::CancelProgressDialogL(void)
+	CreateIconsL__17TObexUtilsUiLayerG4TUidPt9CArrayPtr1Zt9CArrayPtr1Z10CFbsBitmap @ 20 NONAME R3UNUSED ; TObexUtilsUiLayer::CreateIconsL(TUid, CArrayPtr<CArrayPtr<CFbsBitmap> > *)
+	NewL__26CObexUtilsPropertyNotifierP31MObexUtilsPropertyNotifyHandler24TMemoryPropertyCheckType @ 21 NONAME R3UNUSED ; CObexUtilsPropertyNotifier::NewL(MObexUtilsPropertyNotifyHandler *, TMemoryPropertyCheckType)
+	LaunchQueryDialogL__16CObexUtilsDialogRCi @ 22 NONAME R3UNUSED ; CObexUtilsDialog::LaunchQueryDialogL(int const &)
+	ShowNumberOfSendFileL__16CObexUtilsDialogii @ 23 NONAME R3UNUSED ; CObexUtilsDialog::ShowNumberOfSendFileL(int, int)
+	CreateInboxAttachmentL__24TObexUtilsMessageHandlerP14CObexBufObjectG4TUidRlR5RFile @ 24 NONAME ; TObexUtilsMessageHandler::CreateInboxAttachmentL(CObexBufObject *, TUid, long &, RFile &)
+	RemoveInboxEntriesL__24TObexUtilsMessageHandlerRP14CObexBufObjectl @ 25 NONAME R3UNUSED ; TObexUtilsMessageHandler::RemoveInboxEntriesL(CObexBufObject *&, long)
+	SaveObjToInboxL__24TObexUtilsMessageHandlerRP14CObexBufObjectR5RFilel @ 26 NONAME R3UNUSED ; TObexUtilsMessageHandler::SaveObjToInboxL(CObexBufObject *&, RFile &, long)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/bwins/OBEXUTILSU.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,62 @@
+EXPORTS
+	?ReadResourceL@TObexUtilsUiLayer@@SAXAAVTDes16@@ABH@Z @ 1 NONAME ; void TObexUtilsUiLayer::ReadResourceL(class TDes16 &, int const &)
+	?SaveObjToInboxL@TObexUtilsMessageHandler@@SAXPAVCObexBufObject@@ABVTDesC16@@VTUid@@@Z @ 2 NONAME ; void TObexUtilsMessageHandler::SaveObjToInboxL(class CObexBufObject *, class TDesC16 const &, class TUid)
+	?RemoveInboxEntriesL@TObexUtilsMessageHandler@@SAXAAPAVCObexBufObject@@J@Z @ 3 NONAME ; void TObexUtilsMessageHandler::RemoveInboxEntriesL(class CObexBufObject * &, long)
+	?GetNumber@CObexUtilsOpaqueData@@QAEHAAI@Z @ 4 NONAME ; int CObexUtilsOpaqueData::GetNumber(unsigned int &)
+	??0CObexUtilsOpaqueData@@QAE@ABVTDesC8@@@Z @ 5 NONAME ; CObexUtilsOpaqueData::CObexUtilsOpaqueData(class TDesC8 const &)
+	?UpdateProgressDialog@CGlobalProgressDialog@@QAEXHH@Z @ 6 NONAME ; void CGlobalProgressDialog::UpdateProgressDialog(int, int)
+	?AddEntryToInboxL@TObexUtilsMessageHandler@@SAXAAJAAV?$TBuf@$0BAA@@@@Z @ 7 NONAME ; void TObexUtilsMessageHandler::AddEntryToInboxL(long &, class TBuf<256> &)
+	?CancelWaitDialogL@CObexUtilsDialog@@QAEXXZ @ 8 NONAME ; void CObexUtilsDialog::CancelWaitDialogL(void)
+	?LaunchFileManagerL@TObexUtilsUiLayer@@SAXAAVTDesC16@@HH@Z @ 9 NONAME ; void TObexUtilsUiLayer::LaunchFileManagerL(class TDesC16 &, int, int)
+	?CreateDefaultMtmServiceL@TObexUtilsMessageHandler@@SAXVTUid@@@Z @ 10 NONAME ; void TObexUtilsMessageHandler::CreateDefaultMtmServiceL(class TUid)
+	?UpdateProgressDialogL@CObexUtilsDialog@@QAEXHH@Z @ 11 NONAME ; void CObexUtilsDialog::UpdateProgressDialogL(int, int)
+	?GetCenRepKeyStringValueL@TObexUtilsMessageHandler@@SAHVTUid@@KAAVTDes16@@@Z @ 12 NONAME ; int TObexUtilsMessageHandler::GetCenRepKeyStringValueL(class TUid, unsigned long, class TDes16 &)
+	?GetMmcFileSystemStatus@TObexUtilsMessageHandler@@SAHXZ @ 13 NONAME ; int TObexUtilsMessageHandler::GetMmcFileSystemStatus(void)
+	?GetPubSubKeyIntValue@TObexUtilsMessageHandler@@SAHVTUid@@IAAH@Z @ 14 NONAME ; int TObexUtilsMessageHandler::GetPubSubKeyIntValue(class TUid, unsigned int, int &)
+	?IsBackupRunning@TObexUtilsUiLayer@@SAHXZ @ 15 NONAME ; int TObexUtilsUiLayer::IsBackupRunning(void)
+	?CancelProgressDialogL@CObexUtilsDialog@@QAEXXZ @ 16 NONAME ; void CObexUtilsDialog::CancelProgressDialogL(void)
+	?ProcessFinished@CGlobalProgressDialog@@QAEXXZ @ 17 NONAME ; void CGlobalProgressDialog::ProcessFinished(void)
+	?AddEntryToInboxL@TObexUtilsMessageHandler@@SAXAAJAAV?$TBuf@$0BAA@@@PAV?$RArray@J@@@Z @ 18 NONAME ; void TObexUtilsMessageHandler::AddEntryToInboxL(long &, class TBuf<256> &, class RArray<long> *)
+	?CreateIconsL@TObexUtilsUiLayer@@SAXVTUid@@PAV?$CArrayPtr@V?$CArrayPtr@VCFbsBitmap@@@@@@@Z @ 19 NONAME ; void TObexUtilsUiLayer::CreateIconsL(class TUid, class CArrayPtr<class CArrayPtr<class CFbsBitmap> > *)
+	?ShowProgressDialogNameSizeL@CGlobalProgressDialog@@QAEXAAVTDesC16@@_J@Z @ 20 NONAME ; void CGlobalProgressDialog::ShowProgressDialogNameSizeL(class TDesC16 &, long long)
+	?GetFileSystemStatus@TObexUtilsMessageHandler@@SAHXZ @ 21 NONAME ; int TObexUtilsMessageHandler::GetFileSystemStatus(void)
+	?NewL@CObexUtilsDialog@@SAPAV1@PAVMObexUtilsDialogObserver@@@Z @ 22 NONAME ; class CObexUtilsDialog * CObexUtilsDialog::NewL(class MObexUtilsDialogObserver *)
+	?LaunchQueryDialogL@CObexUtilsDialog@@QAEHABH@Z @ 23 NONAME ; int CObexUtilsDialog::LaunchQueryDialogL(int const &)
+	?CreateOutboxEntryL@TObexUtilsMessageHandler@@SAJABVTUid@@ABH@Z @ 24 NONAME ; long TObexUtilsMessageHandler::CreateOutboxEntryL(class TUid const &, int const &)
+	?ShowGlobalConfirmationQueryL@TObexUtilsUiLayer@@SAXABH@Z @ 25 NONAME ; void TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(int const &)
+	?CreateInboxAttachmentL@TObexUtilsMessageHandler@@SAXAAPAVCObexBufObject@@VTUid@@AAJAAVRFile@@@Z @ 26 NONAME ; void TObexUtilsMessageHandler::CreateInboxAttachmentL(class CObexBufObject * &, class TUid, long &, class RFile &)
+	?GetMessageCentreDriveL@TObexUtilsMessageHandler@@SAHXZ @ 27 NONAME ; int TObexUtilsMessageHandler::GetMessageCentreDriveL(void)
+	?LaunchEditorApplicationL@TObexUtilsUiLayer@@SAXAAJ@Z @ 28 NONAME ; void TObexUtilsUiLayer::LaunchEditorApplicationL(long &)
+	?GetCenRepKeyIntValueL@TObexUtilsMessageHandler@@SAHVTUid@@KAAH@Z @ 29 NONAME ; int TObexUtilsMessageHandler::GetCenRepKeyIntValueL(class TUid, unsigned long, int &)
+	?LaunchWaitDialogL@CObexUtilsDialog@@QAEXH@Z @ 30 NONAME ; void CObexUtilsDialog::LaunchWaitDialogL(int)
+	?ShowNoteDialogL@CGlobalDialog@@QAEXHH@Z @ 31 NONAME ; void CGlobalDialog::ShowNoteDialogL(int, int)
+	?ShowGlobalConfirmationQueryPlainL@TObexUtilsUiLayer@@SAHABH@Z @ 32 NONAME ; int TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(int const &)
+	?NewLC@CGlobalProgressDialog@@SAPAV1@PAVMGlobalProgressCallback@@@Z @ 33 NONAME ; class CGlobalProgressDialog * CGlobalProgressDialog::NewLC(class MGlobalProgressCallback *)
+	?IsString@CObexUtilsOpaqueData@@QAEHXZ @ 34 NONAME ; int CObexUtilsOpaqueData::IsString(void)
+	?CreateReceiveBufferAndRFileL@TObexUtilsMessageHandler@@SAHAAVRFile@@ABVTDesC16@@AAV?$TBuf@$0BAA@@@AAPAVCBufFlat@@H@Z @ 35 NONAME ; int TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL(class RFile &, class TDesC16 const &, class TBuf<256> &, class CBufFlat * &, int)
+	?LaunchEditorApplicationOperationL@TObexUtilsUiLayer@@SAPAVCMsvOperation@@AAVCMsvSession@@PAVCMsvEntry@@AAVTRequestStatus@@@Z @ 36 NONAME ; class CMsvOperation * TObexUtilsUiLayer::LaunchEditorApplicationOperationL(class CMsvSession &, class CMsvEntry *, class TRequestStatus &)
+	?OperationNotSupported@TObexUtilsUiLayer@@SAHXZ @ 37 NONAME ; int TObexUtilsUiLayer::OperationNotSupported(void)
+	?ProcessFinished@CGlobalDialog@@QAEXXZ @ 38 NONAME ; void CGlobalDialog::ProcessFinished(void)
+	?UpdateBitmaps@TObexUtilsUiLayer@@SAXVTUid@@AAHAAV?$TBuf@$0BAA@@@11@Z @ 39 NONAME ; void TObexUtilsUiLayer::UpdateBitmaps(class TUid, int &, class TBuf<256> &, int &, int &)
+	?ShowErrorDialogL@CGlobalDialog@@QAEXH@Z @ 40 NONAME ; void CGlobalDialog::ShowErrorDialogL(int)
+	?ShowProgressDialogL@CGlobalProgressDialog@@QAEXH@Z @ 41 NONAME ; void CGlobalProgressDialog::ShowProgressDialogL(int)
+	?ShowNumberOfSendFileL@CObexUtilsDialog@@QAEXHH@Z @ 42 NONAME ; void CObexUtilsDialog::ShowNumberOfSendFileL(int, int)
+	?ShowErrorNoteL@TObexUtilsUiLayer@@SAXABH@Z @ 43 NONAME ; void TObexUtilsUiLayer::ShowErrorNoteL(int const &)
+	?NewL@CObexUtilsPropertyNotifier@@SAPAV1@PAVMObexUtilsPropertyNotifyHandler@@W4TMemoryPropertyCheckType@@@Z @ 44 NONAME ; class CObexUtilsPropertyNotifier * CObexUtilsPropertyNotifier::NewL(class MObexUtilsPropertyNotifyHandler *, enum TMemoryPropertyCheckType)
+	?ShowGlobalFileOpenConfirmationQueryL@TObexUtilsUiLayer@@SAHABHABVTDesC16@@@Z @ 45 NONAME ; int TObexUtilsUiLayer::ShowGlobalFileOpenConfirmationQueryL(int const &, class TDesC16 const &)
+	?GetString@CObexUtilsOpaqueData@@QAEHAAV?$TBuf8@$0BAA@@@@Z @ 46 NONAME ; int CObexUtilsOpaqueData::GetString(class TBuf8<256> &)
+	?UpdateEntryAttachmentL@TObexUtilsMessageHandler@@SAXAAV?$TBuf@$0BAA@@@PAVCMsvEntry@@@Z @ 47 NONAME ; void TObexUtilsMessageHandler::UpdateEntryAttachmentL(class TBuf<256> &, class CMsvEntry *)
+	?NewL@CGlobalDialog@@SAPAV1@PAVMGlobalNoteCallback@@@Z @ 48 NONAME ; class CGlobalDialog * CGlobalDialog::NewL(class MGlobalNoteCallback *)
+	?CreateInboxAttachmentL@TObexUtilsMessageHandler@@SAXAAPAVCObexBufObject@@VTUid@@AAJAAVRFile@@ABVTDesC16@@@Z @ 49 NONAME ; void TObexUtilsMessageHandler::CreateInboxAttachmentL(class CObexBufObject * &, class TUid, long &, class RFile &, class TDesC16 const &)
+	?NewL@CGlobalProgressDialog@@SAPAV1@PAVMGlobalProgressCallback@@@Z @ 50 NONAME ; class CGlobalProgressDialog * CGlobalProgressDialog::NewL(class MGlobalProgressCallback *)
+	?RemoveTemporaryRFileL@TObexUtilsMessageHandler@@SAXABV?$TBuf@$0BAA@@@@Z @ 51 NONAME ; void TObexUtilsMessageHandler::RemoveTemporaryRFileL(class TBuf<256> const &)
+	?LaunchProgressDialogL@CObexUtilsDialog@@QAEXPAVMObexUtilsProgressObserver@@HHH@Z @ 52 NONAME ; void CObexUtilsDialog::LaunchProgressDialogL(class MObexUtilsProgressObserver *, int, int, int)
+	?DeleteOutboxEntryL@TObexUtilsMessageHandler@@SAXABJ@Z @ 53 NONAME ; void TObexUtilsMessageHandler::DeleteOutboxEntryL(long const &)
+	?ContextIcon@TObexUtilsUiLayer@@SAHABVTMsvEntry@@W4TContextMedia@@@Z @ 54 NONAME ; int TObexUtilsUiLayer::ContextIcon(class TMsvEntry const &, enum TContextMedia)
+	?SaveFileToFileSystemL@TObexUtilsMessageHandler@@SAXAAPAVCObexBufObject@@VTUid@@AAJAAV?$TBuf@$0BAA@@@AAVRFile@@ABVTDesC16@@@Z @ 55 NONAME ; void TObexUtilsMessageHandler::SaveFileToFileSystemL(class CObexBufObject * &, class TUid, long &, class TBuf<256> &, class RFile &, class TDesC16 const &)
+	?ShowInformationNoteL@TObexUtilsUiLayer@@SAXABH@Z @ 56 NONAME ; void TObexUtilsUiLayer::ShowInformationNoteL(int const &)
+	?NewLC@CObexUtilsDialog@@SAPAV1@PAVMObexUtilsDialogObserver@@@Z @ 57 NONAME ; class CObexUtilsDialog * CObexUtilsDialog::NewLC(class MObexUtilsDialogObserver *)
+	?LaunchEditorApplicationL@TObexUtilsUiLayer@@SAHPAVCMsvEntry@@AAVCMsvSession@@@Z @ 58 NONAME ; int TObexUtilsUiLayer::LaunchEditorApplicationL(class CMsvEntry *, class CMsvSession &)
+	?SaveObjToInboxL@TObexUtilsMessageHandler@@SAXAAPAVCObexBufObject@@AAVRFile@@J@Z @ 59 NONAME ; void TObexUtilsMessageHandler::SaveObjToInboxL(class CObexBufObject * &, class RFile &, long)
+	?NewLC@CGlobalDialog@@SAPAV1@PAVMGlobalNoteCallback@@@Z @ 60 NONAME ; class CGlobalDialog * CGlobalDialog::NewLC(class MGlobalNoteCallback *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/data/Obexutils.hrh	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2002, 2003 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: 
+*
+*/
+
+
+enum
+{
+    ESendingProgressNote = 1,
+    EConnectingWaitNote,
+    EPrintingWaitNote
+};
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/data/Obexutils.rss	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,532 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains all the resources for the obexutils.
+*     
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME OBUT
+
+//  INCLUDES
+#include <obexutils.loc>
+#include "Obexutils.hrh"
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.loc>
+#include <avkon.mbg>
+
+RESOURCE RSS_SIGNATURE { }
+
+//  RESOURCE DEFINITIONS 
+
+// Popup texts (information notes and error notes)
+
+// ---------------------------------------------------------
+//   
+//    r_ir_connecting
+//    this is the first shown when the user tries connect to other 
+//    remote device.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_connecting            {buf= qtn_ir_connecting;}
+
+// ---------------------------------------------------------
+//   
+//    r_ir_cannot_establish
+//    This informs that the IR connection cannot made to other remote device
+//    for some reason.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_cannot_establish      {buf= qtn_ir_cant_establish_conn;}
+
+// ---------------------------------------------------------
+//   
+//    r_ir_sending_data
+//    This is shown after the IR connection is made succesfully and we are
+//    sending message over IR.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_sending_data          {buf= qtn_ir_sending_data;}
+
+// ---------------------------------------------------------
+//   
+//    r_ir_sending_failed
+//    This is shown when the IR connection is made and some thing goes wrong
+//    during connection.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_sending_failed        {buf= qtn_ir_sending_failed;}
+
+// ---------------------------------------------------------
+//   
+//    r_ir_data_sent
+//    This is shown to the user when the message is sended succesfully.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_data_sent             {buf= qtn_ir_data_sent;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_connecting
+//    Informs state of Bluetooth connection.
+//    this is the first shown when the user tries connect to other 
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_connecting             {buf= qtn_bt_connecting;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_sending_data
+//    This is shown after the Bluetooth connection is made succesfully 
+//    and we are sending message over Bluetooth.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_sending_data           {buf= qtn_bt_sending_data;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_dev_not_avail
+//    This informs that the Bluetooth connection cannot made to other 
+//    remote device for some reason.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_dev_not_avail             {buf= qtn_bt_dev_not_avail;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_failed_to_send
+//    This is shown when the BT connection is made and some thing goes wrong
+//    during connection.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_failed_to_send        {buf= qtn_bt_failed_to_send;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_data_sent
+//    This is shown to the user when the message is sended succesfully via BT.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_data_sent             {buf= qtn_bt_data_sent;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_not_receive_one
+//    This is shown when one image could not be sent
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_not_receive_one        {buf= qtn_bt_bip_format_not_supported;}
+
+// ---------------------------------------------------------
+//   
+//    r_out_of_memory
+//    This is shown when not enough memory
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_out_of_memory	{buf= qtn_memlo_not_enough_memory;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_not_receive_all
+//    This is shown when no images could be sent
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_sent_image_number	{buf= qtn_bt_bip_some_files_sent;}
+RESOURCE TBUF r_bt_not_receive_any		{buf= qtn_bt_bip_no_formats_supported;}
+
+// Confirmation queries
+
+// ---------------------------------------------------------
+//   
+//    Confirmation query
+//    __RD_BT_MSG_RENOVATION not flagged
+//    This is shown when some images could not be sent
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_bt_not_send_all_query
+    {
+    flags   = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items   =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtQuery;
+            id      = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout    = EConfirmationLayout;
+                label     = qtn_bt_bip_not_all_formats_supported;
+                animation = R_QGN_NOTE_QUERY_ANIM;
+                };
+            }
+        };
+    }
+
+// ---------------------------------------------------------
+//   
+//    Confirmation query
+//    This is shown when some images are not supported
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_bt_not_all_supported_query
+    {
+    flags   = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items   =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtQuery;
+            id      = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout    = EConfirmationLayout;
+                label     = qtn_bt_bip_not_all_formats_supported;
+                animation = R_QGN_NOTE_QUERY_ANIM;
+                };
+            }
+        };
+    }
+    
+// ---------------------------------------------------------
+//   
+//    Confirmation query for mixed list
+//    __RD_BT_MSG_RENOVATION flagged
+//    This is shown when some images could not be sent
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_bt_not_send_all_query_mixed
+    {
+    flags   = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items   =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtQuery;
+            id      = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout    = EConfirmationLayout;
+                label     = qtn_bt_bip_mixed_list;
+                animation = R_QGN_NOTE_QUERY_ANIM;
+                };
+            }
+        };
+    }
+
+
+
+// Notes
+
+// -----------------------------------------------------------------------------
+//
+// r_bt_connecting_wait_note
+// 
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_bt_connecting_wait_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EConnectingWaitNote;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label = qtn_bt_connecting;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
+// -----------------------------------------------------------------------------
+//
+// r_ir_connecting_wait_note
+// 
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_ir_connecting_wait_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EConnectingWaitNote;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label = qtn_ir_connecting;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                };
+            }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_bt_printing_wait_note
+// 
+//
+// -----------------------------------------------------------------------------
+//
+
+// NOTE! The strings in the following resources need to be added into 
+//       localization file, once the UI specification is approved.
+//       
+
+RESOURCE DIALOG r_bt_printing_wait_note
+    {
+    flags   = EAknWaitNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items   =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EPrintingWaitNote;
+            control = AVKON_NOTE
+                {
+                layout = EWaitLayout;
+                singular_label = "Sending data...";
+	                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
+
+// Skeletons (resources with changing text)
+
+// -----------------------------------------------------------------------------
+//
+// r_sending_progress_note
+// 
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_sending_progress_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = ESendingProgressNote;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label  = qtn_bt_sending_data;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                };
+            }
+        };
+    }
+    
+// ---------------------------------------------------------
+//   
+//    r_ir_failed_to_receive
+//    This is shown to the user when failing receive file via infrared.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_failed_to_receive     {buf=qtn_ir_failed_to_receive;}
+
+// ---------------------------------------------------------
+//   
+//    qtn_ir_receiving_data
+//    This is shown to the user when receiving data via IR.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_receiving_data        {buf=qtn_ir_receiving_data;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_receiving_data
+//    This is shown after the Bluetooth connection is made succesfully 
+//    and we are receiving message over Bluetooth.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_receiving_data           {buf= qtn_bt_receiving_data;}
+
+// ---------------------------------------------------------
+//   
+//    qtn_bt_failed_to_receive
+//    This is shown when the BT connection is made and some thing goes wrong
+//    when receiving data.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_failed_to_receive        {buf= qtn_bt_failed_to_receive;}    
+
+// Other resource texts
+
+// ---------------------------------------------------------
+//   
+//    r_ir_send_progress_sending
+//    descripes status of item that is currently sending state in the outbox.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_send_progress_sending {buf= qtn_mce_outbox_status_sending;} 
+
+// ---------------------------------------------------------
+//   
+//    r_ir_send_progress_sending
+//    descripes status of item that is currently sending state in the outbox.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_send_progress_sending {buf= qtn_mce_outbox_status_sending;} 
+
+// ---------------------------------------------------------
+//   
+//    r_ir_send_outbox_sending
+//    Displayed in the "To/From" section for Ir objects in message centre.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_ir_send_outbox_sending   {buf= qtn_mce_ir_message;}
+
+// ---------------------------------------------------------
+//   
+//    r_bt_send_outbox_sending
+//    Displayed in the "To/From" section for Ir objects in message centre.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_bt_send_outbox_sending   {buf= qtn_mce_bt_message;}
+
+// ---------------------------------------------------------
+//   
+//    r_message_not_opened
+//    This is shown, when the user tries open a message that is not
+//    supported type.
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_message_not_opened       {buf= qtn_mce_info_message_not_opened;}
+
+// ---------------------------------------------------------
+//   
+//    r_name_for_invalid_file
+//    Default invalid filename
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_name_for_invalid_file  { buf=qtn_fldr_default_doc_name; }
+
+// ---------------------------------------------------------
+//   
+//    r_bt_to_from_in_inbox
+//    Displayed in the "To/From" section for Bluetooth objects.
+//
+// ---------------------------------------------------------
+// 
+RESOURCE TBUF       r_bt_to_from_in_inbox  { buf=qtn_mce_bt_message; }  
+
+// ---------------------------------------------------------
+//   
+//    r_ir_to_from_in_inbox
+//    Displayed in the "To/From" section for Ir objects.
+//
+// ---------------------------------------------------------
+// 
+RESOURCE TBUF       r_ir_to_from_in_inbox  { buf=qtn_mce_ir_message; }  
+
+RESOURCE TBUF r_bt_data_sent2 { buf= "Data sent"; }
+RESOURCE TBUF r_bt_failed_to_send2 { buf= "Sending failed"; }
+RESOURCE TBUF r_bt_printing_not_supported { buf = "Printer not supported"; }
+RESOURCE TBUF r_bt_sending_not_supported {buf = "Unsupported device";}
+
+RESOURCE TBUF r_bt_saved_single   { buf  = qtn_bt_saved_single; }
+RESOURCE TBUF r_bt_saved_multiple { buf = qtn_bt_saved_multiple; }
+RESOURCE TBUF r_bt_saved_search   { buf = qtn_bt_saved_search; }
+RESOURCE TBUF r_bt_saved_no_memory_card { buf = qtn_bt_saved_no_memory_card; }
+RESOURCE TBUF r_bt_saved_link_updated { buf = qtn_bt_saved_link_updated; }
+RESOURCE TBUF r_bt_saved_search_update   { buf  = qtn_bt_saved_search_update; }
+
+RESOURCE TBUF r_bt_ir_receiving_data_size_kb { buf = qtn_bt_ir_receiving_data_size_kb ; }
+RESOURCE TBUF r_bt_ir_receiving_data_size_mb { buf = qtn_bt_ir_receiving_data_size_mb ; }
+
+RESOURCE TBUF r_bt_ir_receiving_data_no_size { buf = qtn_bt_ir_receiving_data_no_size ; }
+
+// ---------------------------------------------------------
+//   
+//    Confirmation query for mixed list
+//    __RD_BT_MSG_RENOVATION flagged
+//    This is shown when some images could not be sent
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_bt_not_send_all_query_single
+    {
+    flags   = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items   =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtQuery;
+            id      = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout    = EConfirmationLayout;
+                label     = qtn_bt_bip_format_not_supported_send;
+                animation = R_QGN_NOTE_QUERY_ANIM;
+                };
+            }
+        };
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/eabi/obexutilsu.DEF	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,63 @@
+EXPORTS
+	_ZN13CGlobalDialog15ProcessFinishedEv @ 1 NONAME
+	_ZN13CGlobalDialog15ShowNoteDialogLEii @ 2 NONAME
+	_ZN13CGlobalDialog16ShowErrorDialogLEi @ 3 NONAME
+	_ZN13CGlobalDialog4NewLEP19MGlobalNoteCallback @ 4 NONAME
+	_ZN13CGlobalDialog5NewLCEP19MGlobalNoteCallback @ 5 NONAME
+	_ZN16CObexUtilsDialog17CancelWaitDialogLEv @ 6 NONAME
+	_ZN16CObexUtilsDialog17LaunchWaitDialogLEi @ 7 NONAME
+	_ZN16CObexUtilsDialog18LaunchQueryDialogLERKi @ 8 NONAME
+	_ZN16CObexUtilsDialog21CancelProgressDialogLEv @ 9 NONAME
+	_ZN16CObexUtilsDialog21LaunchProgressDialogLEP26MObexUtilsProgressObserveriii @ 10 NONAME
+	_ZN16CObexUtilsDialog21ShowNumberOfSendFileLEii @ 11 NONAME
+	_ZN16CObexUtilsDialog21UpdateProgressDialogLEii @ 12 NONAME
+	_ZN16CObexUtilsDialog4NewLEP24MObexUtilsDialogObserver @ 13 NONAME
+	_ZN16CObexUtilsDialog5NewLCEP24MObexUtilsDialogObserver @ 14 NONAME
+	_ZN17TObexUtilsUiLayer11ContextIconERK9TMsvEntry13TContextMedia @ 15 NONAME
+	_ZN17TObexUtilsUiLayer12CreateIconsLE4TUidP9CArrayPtrIS1_I10CFbsBitmapEE @ 16 NONAME
+	_ZN17TObexUtilsUiLayer13ReadResourceLER6TDes16RKi @ 17 NONAME
+	_ZN17TObexUtilsUiLayer13UpdateBitmapsE4TUidRiR4TBufILi256EES1_S1_ @ 18 NONAME
+	_ZN17TObexUtilsUiLayer14ShowErrorNoteLERKi @ 19 NONAME
+	_ZN17TObexUtilsUiLayer15IsBackupRunningEv @ 20 NONAME
+	_ZN17TObexUtilsUiLayer18LaunchFileManagerLER7TDesC16ii @ 21 NONAME
+	_ZN17TObexUtilsUiLayer20ShowInformationNoteLERKi @ 22 NONAME
+	_ZN17TObexUtilsUiLayer21OperationNotSupportedEv @ 23 NONAME
+	_ZN17TObexUtilsUiLayer24LaunchEditorApplicationLEP9CMsvEntryR11CMsvSession @ 24 NONAME
+	_ZN17TObexUtilsUiLayer24LaunchEditorApplicationLERl @ 25 NONAME
+	_ZN17TObexUtilsUiLayer28ShowGlobalConfirmationQueryLERKi @ 26 NONAME
+	_ZN17TObexUtilsUiLayer33LaunchEditorApplicationOperationLER11CMsvSessionP9CMsvEntryR14TRequestStatus @ 27 NONAME
+	_ZN17TObexUtilsUiLayer33ShowGlobalConfirmationQueryPlainLERKi @ 28 NONAME
+	_ZN17TObexUtilsUiLayer36ShowGlobalFileOpenConfirmationQueryLERKiRK7TDesC16 @ 29 NONAME
+	_ZN20CObexUtilsOpaqueData8IsStringEv @ 30 NONAME
+	_ZN20CObexUtilsOpaqueData9GetNumberERj @ 31 NONAME
+	_ZN20CObexUtilsOpaqueData9GetStringER5TBuf8ILi256EE @ 32 NONAME
+	_ZN20CObexUtilsOpaqueDataC1ERK6TDesC8 @ 33 NONAME
+	_ZN20CObexUtilsOpaqueDataC2ERK6TDesC8 @ 34 NONAME
+	_ZN21CGlobalProgressDialog15ProcessFinishedEv @ 35 NONAME
+	_ZN21CGlobalProgressDialog19ShowProgressDialogLEi @ 36 NONAME
+	_ZN21CGlobalProgressDialog20UpdateProgressDialogEii @ 37 NONAME
+	_ZN21CGlobalProgressDialog27ShowProgressDialogNameSizeLER7TDesC16x @ 38 NONAME
+	_ZN21CGlobalProgressDialog4NewLEP23MGlobalProgressCallback @ 39 NONAME
+	_ZN21CGlobalProgressDialog5NewLCEP23MGlobalProgressCallback @ 40 NONAME
+	_ZN24TObexUtilsMessageHandler15SaveObjToInboxLEP14CObexBufObjectRK7TDesC164TUid @ 41 NONAME
+	_ZN24TObexUtilsMessageHandler15SaveObjToInboxLERP14CObexBufObjectR5RFilel @ 42 NONAME
+	_ZN24TObexUtilsMessageHandler16AddEntryToInboxLERlR4TBufILi256EE @ 43 NONAME
+	_ZN24TObexUtilsMessageHandler16AddEntryToInboxLERlR4TBufILi256EEP6RArrayIlE @ 44 NONAME
+	_ZN24TObexUtilsMessageHandler18CreateOutboxEntryLERK4TUidRKi @ 45 NONAME
+	_ZN24TObexUtilsMessageHandler18DeleteOutboxEntryLERKl @ 46 NONAME
+	_ZN24TObexUtilsMessageHandler19GetFileSystemStatusEv @ 47 NONAME
+	_ZN24TObexUtilsMessageHandler19RemoveInboxEntriesLERP14CObexBufObjectl @ 48 NONAME
+	_ZN24TObexUtilsMessageHandler20GetPubSubKeyIntValueE4TUidjRi @ 49 NONAME
+	_ZN24TObexUtilsMessageHandler21GetCenRepKeyIntValueLE4TUidmRi @ 50 NONAME
+	_ZN24TObexUtilsMessageHandler21RemoveTemporaryRFileLERK4TBufILi256EE @ 51 NONAME
+	_ZN24TObexUtilsMessageHandler21SaveFileToFileSystemLERP14CObexBufObject4TUidRlR4TBufILi256EER5RFileRK7TDesC16 @ 52 NONAME
+	_ZN24TObexUtilsMessageHandler22CreateInboxAttachmentLERP14CObexBufObject4TUidRlR5RFile @ 53 NONAME
+	_ZN24TObexUtilsMessageHandler22CreateInboxAttachmentLERP14CObexBufObject4TUidRlR5RFileRK7TDesC16 @ 54 NONAME
+	_ZN24TObexUtilsMessageHandler22GetMessageCentreDriveLEv @ 55 NONAME
+	_ZN24TObexUtilsMessageHandler22GetMmcFileSystemStatusEv @ 56 NONAME
+	_ZN24TObexUtilsMessageHandler22UpdateEntryAttachmentLER4TBufILi256EEP9CMsvEntry @ 57 NONAME
+	_ZN24TObexUtilsMessageHandler24CreateDefaultMtmServiceLE4TUid @ 58 NONAME
+	_ZN24TObexUtilsMessageHandler24GetCenRepKeyStringValueLE4TUidmR6TDes16 @ 59 NONAME
+	_ZN24TObexUtilsMessageHandler28CreateReceiveBufferAndRFileLER5RFileRK7TDesC16R4TBufILi256EERP8CBufFlati @ 60 NONAME
+	_ZN26CObexUtilsPropertyNotifier4NewLEP31MObexUtilsPropertyNotifyHandler24TMemoryPropertyCheckType @ 61 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2002 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: 
+*        This file provides the information required for building the
+*    whole of a Obexutils.
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/obexutilsuilayer.h                |../../../inc/obexutilsuilayer.h
+../inc/obexutilsdialog.h                 |../../../inc/obexutilsdialog.h
+../inc/obexutilspropertynotifier.h       |../../../inc/obexutilspropertynotifier.h
+../inc/obexutilsglobalprogressdialog.h   |../../../inc/obexutilsglobalprogressdialog.h
+
+../loc/Obexutils.loc       MW_LAYER_LOC_EXPORT_PATH(obexutils.loc)
+
+
+PRJ_MMPFILES
+obexutils.mmp
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/group/obexutils.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 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: 
+*    Constructs obexutils.dll
+*     
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET        obexutils.dll
+TARGETTYPE    dll
+UID           0x10004262 0x101F86AF
+VENDORID      VID_DEFAULT
+
+START RESOURCE  ../data/Obexutils.rss
+TARGETPATH RESOURCE_FILES_DIR  
+HEADER
+LANGUAGE_IDS
+END
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE ../inc
+NON_FOUNDATION_ADAPT_LAYER_SYSTEMINCLUDE
+
+
+SOURCEPATH    ../src
+SOURCE        obexutilsuilayer.cpp
+SOURCE        obexutilslaunchwaiter.cpp
+SOURCE        obexutilsdialogtimer.cpp
+SOURCE        obexutilsdialog.cpp
+SOURCE        obexutilsmessagehandler.cpp
+SOURCE        obexutilspropertynotifier.cpp
+SOURCE        obexutilsopaquedata.cpp
+SOURCE        obexutilsglobalprogressdialog.cpp
+SOURCE        obexutilsglobaldialog.cpp
+SOURCE        obexutilsentryhandler.cpp
+SOURCE        updatemusiccollection.cpp
+#ifdef __BT_SAP
+ SOURCE       vMessageHandler.cpp
+#endif
+
+SYSTEMINCLUDE  ../../../inc ../../../../inc  
+#ifdef NO101APPDEPFIXES
+APP_LAYER_SYSTEMINCLUDE
+#else   //NO101APPDEPFIXES
+MW_LAYER_SYSTEMINCLUDE
+#endif  //NO101APPDEPFIXES
+// SMUT Unbranch
+#ifdef __BT_SAP
+SYSTEMINCLUDE   /epoc32/include/ecom
+#endif
+
+LIBRARY         apgrfx.lib
+LIBRARY         apmime.lib
+LIBRARY         avkon.lib
+LIBRARY         bafl.lib 
+LIBRARY         bifu.lib
+LIBRARY         biodb.lib
+LIBRARY         charconv.lib
+LIBRARY         cone.lib
+LIBRARY         commonengine.lib
+LIBRARY         commonui.lib
+LIBRARY         efsrv.lib
+LIBRARY         eikctl.lib
+LIBRARY         etext.lib
+LIBRARY         euser.lib
+LIBRARY         irobex.lib
+LIBRARY         msgs.lib
+LIBRARY         aknskins.lib        
+LIBRARY         centralrepository.lib
+LIBRARY         apparc.lib
+LIBRARY         servicehandler.lib
+LIBRARY         eikdlg.lib
+LIBRARY         featmgr.lib
+LIBRARY         aknnotify.lib
+LIBRARY 		commondialogs.lib 
+LIBRARY			platformenv.lib 
+LIBRARY			mpxcollectionhelper.lib
+LIBRARY			mpxplaybackutility.lib
+
+#ifdef __BT_SAP
+ LIBRARY        smcm.lib
+ LIBRARY        gsmu.lib
+// SMUT Unbranch 
+ LIBRARY        ecom.lib
+#endif
+
+DEBUGLIBRARY    flogger.lib
+
+CAPABILITY      CAP_GENERAL_DLL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsdebug.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002 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:  This file defines logging macros for ObexUtils
+*
+*/
+
+
+#ifndef OBEXUTILS_DEBUG_H
+#define OBEXUTILS_DEBUG_H
+
+
+#ifdef _DEBUG
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"obexutils.txt");
+_LIT(KLogDirFullName,"c:\\logs\\");
+_LIT(KLogDir,"obexutils");
+
+// Declare the FPrint function
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#define FLOG(a)   { FPrint(a); }
+#define FTRACE(a) { a; }
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+#define FLOG(a) { RDebug::Print(a);  }
+#define FTRACE(a) { a; }
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(a)
+#define FTRACE(a)
+
+#endif // _DEBUG
+
+
+#endif // OBEXUTILS_DEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsdialog.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2002 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 COBEXUTILSDIALOG_H
+#define COBEXUTILSDIALOG_H
+
+//  INCLUDES
+#include    <e32base.h>
+#include    <AknWaitDialog.h>
+
+// FORWARD DECLARATIONS
+class CAknWaitDialog;
+class CObexUtilsDialogTimer;
+
+// CLASS DECLARATION
+
+/**
+*  An observer interface for asking progress status of an operation using 
+*  a progress dialog.
+*/
+NONSHARABLE_CLASS(  MObexUtilsProgressObserver )
+    {
+    public:
+
+        /**
+        * Returns the progress status of the operation.
+        * @since 2.6
+        * @return A progress value relative to final value.
+        */
+        virtual TInt GetProgressStatus() = 0;
+    };
+
+// CLASS DECLARATION
+
+/**
+*  An observer interface for informing about dialog events.
+*/
+NONSHARABLE_CLASS(  MObexUtilsDialogObserver )
+    {
+    public:
+
+        /**
+        * Informs the observer that a dialog has been dismissed.
+        * @since 2.6
+        * @param aButtonId The button that was used to dismiss the dialog.
+        * @return None.
+        */
+        virtual void DialogDismissed( TInt aButtonId ) = 0;
+    };
+
+
+// CLASS DECLARATION
+
+/**
+*  A class for launching and managing dialogs.
+*/
+NONSHARABLE_CLASS( CObexUtilsDialog ) : public CBase, public MProgressDialogCallback
+    {
+    public:// Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CObexUtilsDialog* NewL( 
+            MObexUtilsDialogObserver* aObserverPtr );        
+        
+        IMPORT_C static CObexUtilsDialog* NewLC( 
+            MObexUtilsDialogObserver* aObserverPtr );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CObexUtilsDialog();
+   
+    public: // New functions
+        
+        /**
+        * Launches a progress dialog.
+        * @since 2.6
+        * @param aObserverPtr A pointer to progress observer. A NULL pointer if 
+                              the progress dialog is updated manually.
+        * @param aFinalValue The final value of the operation (progress=100%).
+        * @param aResId A resource id for the string to be shown in the dialog.
+        * @param aTimeoutValue A value telling how often should the dialog be
+                               updated. Relevant only if observer given.
+        * @return None.
+        */
+        IMPORT_C void LaunchProgressDialogL( 
+            MObexUtilsProgressObserver* aObserverPtr, TInt aFinalValue, 
+            TInt aResId, TInt aTimeoutValue );    
+        
+        /**
+        * Launches a wait dialog.
+        * @since 2.6
+        * @param aResId A resource id for the string to be shown in the dialog.
+        * @return None.
+        */
+        IMPORT_C void LaunchWaitDialogL( TInt aResId );
+        
+        /**
+        * Cancels a wait dialog if one exists.
+        * @since 2.6        
+        * @return None.
+        */
+        IMPORT_C void CancelWaitDialogL();
+        
+        /**
+        * Cancels a wait progress dialog if one exists.
+        * @since 2.6       
+        * @return None.
+        */
+        IMPORT_C void CancelProgressDialogL();
+        
+        /**
+        * Updates a progress dialog. Should not be used if the 
+        * MObexUtilsDialogObserver pointer was given.
+        * @since 2.6
+        * @param aValue A progress value relative to final value.
+        * @param aResId A resource id for the string to be shown in the dialog.
+        * @return None
+        */
+        IMPORT_C void UpdateProgressDialogL( TInt aValue, TInt aResId );
+        
+        /**
+        * Show a query note
+        * @param aResourceID A resource id for the note.
+        * @return User's input - Yes/No
+        */
+        IMPORT_C TInt LaunchQueryDialogL( const TInt& aResourceID );
+        
+        /**
+        * Show how many files are sent in case not all images are supported
+        * @param aSentNum Number of sent files
+        * @param aTotlNum Number of total files
+        * return None.
+        */
+        
+        IMPORT_C void ShowNumberOfSendFileL( TInt aSentNum, TInt aTotalNum );
+
+        /**
+        * Prepares dialog for execution
+        * @param aResourceID Resource ID of the dialog
+        * @param aDialog Dialog
+        */
+        void PrepareDialogExecuteL( const TInt& aResourceID, CEikDialog* aDialog );
+
+        /**
+        * Check if cover display is enabled
+        * return True if enabled
+        */
+        TBool IsCoverDisplayL();
+
+    public: // New functions (not exported)
+
+        /**
+        * Updates the progress dialog.
+        * @return None.
+        */
+        void UpdateProgressDialog();
+
+    private: // Functions from base classes
+
+        /**
+        * From MProgressDialogCallback A dialog has been dismissed.
+        * @param aButtonId The button that was used to dismiss the dialog.
+        * @return None.
+        */
+        void DialogDismissedL( TInt aButtonId );
+
+    private:
+        TInt ExecuteDialogL( const TInt& aResourceID, CEikDialog* aDialog );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CObexUtilsDialog( MObexUtilsDialogObserver* aObserverPtr );
+	
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+    private: // Data
+
+        CAknProgressDialog*         iProgressDialog;
+        CAknWaitDialog*             iWaitDialog;
+        CObexUtilsDialogTimer*      iObexDialogTimer;
+        TInt                        iResourceFileId;
+        TInt                        iProgressDialogResId;
+        TBool                       iCoverDisplayEnabled;
+
+        // Not Owned
+        //
+        MObexUtilsProgressObserver* iProgressObserverPtr;
+        MObexUtilsDialogObserver*   iDialogObserverPtr;
+    };
+
+#endif      // COBEXUTILSDIALOG_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsdialogtimer.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002 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 COBEXUTILSDIALOGTIMER_H
+#define COBEXUTILSDIALOGTIMER_H
+
+//  INCLUDES
+#include "obexutilsdialog.h"
+
+// CLASS DECLARATION
+/**
+*  A timer class for updating progress dialog.
+*/
+NONSHARABLE_CLASS( CObexUtilsDialogTimer ) : public CTimer
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */                           
+        static CObexUtilsDialogTimer* NewL( CObexUtilsDialog* aParent );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CObexUtilsDialogTimer();
+     
+    public: // New functions
+
+        /**
+        * Sets the timeout of the timer.
+        * @param aTimeout The timeout in microseconds.
+        * @return None.
+        */
+        void SetTimeout( TTimeIntervalMicroSeconds32 aTimeout );
+
+        /**
+        * Restarts the timer.
+        * @return None.
+        */
+        void Tickle();
+
+    private: // Functions from base classes
+
+        /**
+        * From CTimer Get's called when the timer expires.        
+        * @return None.
+        */
+        void RunL();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CObexUtilsDialogTimer( CObexUtilsDialog* aParent );
+        
+        /**
+        * By default Symbian OS constructor is private.
+        */      
+        void ConstructL();
+
+    private: // Data
+        TTimeIntervalMicroSeconds32 iTimeout;
+        CObexUtilsDialog*           iParent;
+    };
+
+#endif      // COBEXUTILSDIALOGTIMER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsentryhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2002 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:  Definition of the global progress dialog class
+*
+*/
+
+
+
+#ifndef OBEXUTILSENTRYHANDLER_H_
+#define OBEXUTILSENTRYHANDLER_H_
+
+#include <e32base.h>
+#include <cmsvattachment.h>
+
+/**
+ *  Obexutils link hander
+ *  Maintain the links in inbox.
+ * 
+ *  @since S60 v5.0
+ */
+
+NONSHARABLE_CLASS( CObexutilsEntryhandler ) : public CActive
+{
+
+public:
+
+    static CObexutilsEntryhandler* NewL();
+    static CObexutilsEntryhandler* NewLC();    
+
+    /**
+     * Destructor.
+     */
+    virtual ~CObexutilsEntryhandler();
+
+    /**
+     * Add an linked attachment to entry 
+     *
+     * @since S60 v5.0
+     * @param aFilePath The absolute file path of the linked attachment file. 
+     * @param anAttachInfo The attachment info associated with the file.
+     * @param aStore An interface over the message store that is associated with a message entry.
+     * @return error code
+     */
+    TInt AddEntryAttachment(const TDesC &aFilePath, CMsvAttachment* anAttachInfo, CMsvStore* aStore );
+    
+    /**
+     * Update an entry attachment
+     * @since S60 v5.0
+     * @param aFilePath the absolute file path of the linked attachment file.
+     * @param anAttachInfo the attachment info associated with the file.
+     * @param aStore An interface ove the message store that is associated with a message entry.
+     * @return error code
+     */
+    TInt UpdateEntryAttachment(TFileName& aFileName,
+                              CMsvAttachment* anOldAttachInfo,
+                              CMsvAttachment* aNewAttachInfo,
+                              CMsvStore* aStore );
+    
+    // from base class CActive
+         
+    /**
+     * From CActive.
+     * RunL
+     *
+     * @since S60 v5.0
+     */
+    void RunL();
+         
+    /**
+     * From CActive.
+     * DoCancel
+     *
+     * @since S60 v5.0
+     */
+    void DoCancel();
+    
+    
+private:
+    /**
+     * Default C++ constructor.
+     */ 
+    CObexutilsEntryhandler();
+    
+    /**
+     * Symbian two-phase constructor.
+     */ 
+    void ConstructL();
+
+    /**
+     * Add link attachment 
+     * 
+     * @since S60 v5.0
+     */
+    void DoAddEntryAttachmentL(const TDesC &aFilePath, CMsvAttachment* anAttachInfo, CMsvStore* aStore);
+    
+   
+    /**
+     * Update link attachment 
+     * 
+     * @since S60 v5.0
+     */
+    void DoUpdateEntryAttachmentL(TFileName& aFileName,
+                                 CMsvAttachment* anOldAttachInfo,
+                                 CMsvAttachment* aNewAttachInfo,
+                                 CMsvStore* aStore);
+    
+private: // member data
+
+     
+    /**
+     * Sync waiter object 
+     */
+    CActiveSchedulerWait    iSyncWaiter;
+
+
+};
+
+
+#endif /*OBEXUTILSENTRYHANDLER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsglobalprogressdialog.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2002 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:  Definition of the global progress dialog class
+*
+*/
+
+
+
+
+#ifndef __OBEXUTILS_GLOBAL_PROGRESS_DIALOG__
+#define __OBEXUTILS_GLOBAL_PROGRESS_DIALOG__
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringresourcereader.h>
+#include <Obexutils.rsg>
+#include <avkon.rsg>                     // R_QGN_GRAF_WAIT_BAR_ANIM
+#include <AknGlobalNote.h>
+
+#include <coecntrl.h>
+
+// FORWARD DECLARATIONS
+class CAknGlobalProgressDialog;
+
+
+// CLASS DECLARATION
+
+// Call back for progress bar
+NONSHARABLE_CLASS(  MGlobalProgressCallback )
+    {
+    public:
+        virtual void HandleGlobalProgressDialogL( TInt aSoftkey ) = 0;
+    };
+
+
+
+
+
+NONSHARABLE_CLASS( CGlobalProgressDialog ) : public CActive
+{
+   public:  // Constructors and destructor
+        
+
+      /**
+      * Two-phased constructor.
+      */
+      IMPORT_C static CGlobalProgressDialog* NewLC(MGlobalProgressCallback* aObserver);
+      IMPORT_C static CGlobalProgressDialog* NewL(MGlobalProgressCallback* aObserver);
+
+
+      /**
+      * Destructor.
+      */
+      virtual ~CGlobalProgressDialog();
+
+   public: // New functions
+        
+      /**
+      * Sets the icon for this dialog
+      * @param aIconText Text of the icon
+      * @param aIconFile File containing icon
+      * @param aIconId Icon ID
+      * @param aIconMaskId  Icon mask ID
+      * @return void
+      */
+      void SetIconL( const TDesC& aIconText, const TDesC& aIconFile,
+                                TInt aIconId = 0, TInt aIconMaskId = -1 );
+      /**
+      * Sets the image for the dialog
+      * @param aImageFile Image filename
+      * @param aImageId Image ID
+      * @param aImageMaskId Image mask ID
+      * @return void
+      */
+      void SetImageL( const TDesC& aImageFile, TInt aImageId = 0,
+                                 TInt aImageMaskId = -1 );
+
+      /**
+      * Shows the progress dialog
+      * @return void
+      */
+      IMPORT_C void ShowProgressDialogL(TInt aStringId);
+      IMPORT_C void ShowProgressDialogNameSizeL( TDesC& aFileName, 
+                                                 TInt64 aFileSize);
+      
+      
+      /**
+      * Updates the progress dialog
+      * @param aValue progress bar value
+      * @param aFinalValue progress bar final value
+      * @return void
+      */
+      IMPORT_C void UpdateProgressDialog(TInt aValue, TInt aFinalValue);
+
+      /**
+      * Called to complete the global progress dialog
+      * @return void
+      */
+      IMPORT_C void ProcessFinished();
+      
+
+   protected:  // Functions from base classes
+        
+      /**
+      * From CActive Active Object RunL()
+      */
+      virtual void RunL();
+
+      /**
+      * From CActive Active Object DoCancel()
+      */
+      virtual void DoCancel();
+
+
+   private:
+
+      /**
+      * By default constructor is private.
+      */
+      void ConstructL(MGlobalProgressCallback* aObserver);
+
+      /**
+      * C++ default constructor.
+      */
+      CGlobalProgressDialog();
+
+   private: //data
+        CAknGlobalProgressDialog*  iProgressDialog;
+         
+        MGlobalProgressCallback*   iKeyCallback;
+        CStringResourceReader*  iStringResourceReader;
+                
+};
+
+
+
+// Call back for note with animation and without animation
+NONSHARABLE_CLASS(  MGlobalNoteCallback )
+    {
+    public:
+        virtual void HandleGlobalNoteDialogL( TInt aSoftkey ) = 0;
+    };
+
+
+
+NONSHARABLE_CLASS( CGlobalDialog ) : public CActive
+{
+   public:  // Constructors and destructor
+        
+
+      /**
+      * Two-phased constructor.
+      */
+      IMPORT_C static CGlobalDialog* NewLC(MGlobalNoteCallback* aObserver);
+      IMPORT_C static CGlobalDialog* NewL(MGlobalNoteCallback* aObserver);
+
+
+      /*
+       *  public functions
+       */
+      IMPORT_C void ShowNoteDialogL( TInt aResourceId, TBool anAnimation);
+      IMPORT_C void ShowErrorDialogL(TInt aResourceId);            
+      IMPORT_C  void ProcessFinished();
+
+      /**
+      * Destructor.
+      */
+      virtual ~CGlobalDialog();
+
+
+   protected:  // Functions from base classes
+        
+      /**
+      * From CActive Active Object RunL()
+      */
+      virtual void RunL();
+
+      /**
+      * From CActive Active Object DoCancel()
+      */
+      virtual void DoCancel();
+
+
+   private:
+
+      /**
+      * By default constructor is private.
+      */
+      void ConstructL(MGlobalNoteCallback* aObserver);
+
+      /**
+      * C++ default constructor.
+      */
+      CGlobalDialog();
+
+   private: //data
+        
+        MGlobalNoteCallback*   iKeyCallback;
+        CStringResourceReader*  iStringResourceReader;
+        CAknGlobalNote* iAknGlobalNote;
+        TInt iWaitNoteID;
+
+};
+
+
+
+
+
+
+
+
+
+
+
+#endif  // __OBEXUTILS_GLOBAL_PROGRESS_DIALOG__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilslaunchwaiter.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2002 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 COBEXUTILSLAUNCHWAITER_H
+#define COBEXUTILSLAUNCHWAITER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <apparc.h>
+
+#include <AknServerApp.h>
+#include <msvapi.h>
+#include <obexutilsdialog.h>
+
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+*  A class waiting for editing of an embedded document to complete.
+*/
+
+NONSHARABLE_CLASS( CObexUtilsLaunchWaiter ) : public CMsvOperation, public MAknServerAppExitObserver
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+	    static CObexUtilsLaunchWaiter* NewLC( 
+        	CMsvSession& aMsvSession,
+        	CMsvEntry* aMessage,
+            TRequestStatus& aObserverRequestStatus );
+
+        /**
+        * Two-phased constructor.
+        */
+    	static CObexUtilsLaunchWaiter* NewL( 
+        	CMsvSession& aMsvSession,
+        	CMsvEntry* aMessage,
+            TRequestStatus& aObserverRequestStatus );
+
+        /**
+        * Destructor.
+        */
+        ~CObexUtilsLaunchWaiter();
+
+    public: // Functions from base classes		
+       
+        /**
+        * From MAknServerAppExitObserve Editing has completed.
+        * @param TInt The exit mode including document state.
+        * @return None.
+        */
+        void HandleServerAppExit(TInt aReason);
+
+        /**
+        * From CActive A request has been completed.
+        * @return None.
+        */
+	    void RunL();
+
+        /**
+        * From CActive A request has been cancelled.
+        * @return None.
+        */
+	    void DoCancel();
+	    
+        /**
+        * ProgressL
+        * @return TDesC8&, progress
+        */
+        virtual const TDesC8& ProgressL();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+	    CObexUtilsLaunchWaiter(
+        	CMsvSession& aMsvSession,
+        	CMsvEntry* aMessage,
+            TRequestStatus& aObserverRequestStatus );
+            
+        void ConstructL( CMsvEntry* aMessage );
+        
+        /**
+         * Locate the file used to fix the broken link in Inbox
+         * @param aFileName the file including full path user selects  ( on return )
+         * @param anOldFileName old file name including full path saved in attachment.
+         * @return TBool 
+         */
+        TBool LocateFileL(TFileName& aFileName, const TFileName& anOldFileName);
+        
+        /**
+         * Launch Selection dialog for user to locate the file
+         * @param aFileName the file including full path user selects  ( on return )
+         * @param anOldFileName old file name excluding full path saved in attachment.
+         * @return TBool
+         */
+        TBool LaunchFileSelectionDialogL(TFileName& aFileName, const TFileName& anOldFileName);
+        
+        /**
+         * Check the drive if available.
+         * @param aDriveNumber enum TDriveNumber defined in f32file.h
+         * @return Symbian error code
+         */
+        TInt CheckDriveL(TDriveNumber aDriveNumber); 
+        
+        /**
+         * Check if the file is saved in memory card.
+         * @param aFileName full path and name of the file 
+         * @return  TDriveNumber if saved in E or F drive; 
+         *          otherwise KErrNotFound. 
+         */
+        TInt CheckIfSaveInMMC(const TFileName& aFileName);
+
+    private:
+        CDocumentHandler* iDocumentHandler;
+	};
+
+#endif      // COBEXUTILSLAUNCHWAITER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsopaquedata.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2002 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: 
+*     Service controller resouce file's opaque_data parser.
+*
+*/
+
+
+#ifndef OBEXUTILSOPAQUEDATA_H
+#define OBEXUTILSOPAQUEDATA_H
+
+
+//  INCLUDES
+#include <e32std.h>
+#include <e32cons.h>
+
+const TUint KObexUtilsMaxOpaqueDataStringLen = 0x100;
+
+// CLASS DECLARATION
+
+/**
+* Process opaque_data field in service controller ECom plug-in resource file.
+* opaque_data field contains 2 types of data: string and number.
+*/
+NONSHARABLE_CLASS( CObexUtilsOpaqueData ): public CBase
+    {
+public:
+
+	/**
+    * constructor.
+	* @param	aDes buffer to hold the opaque_data
+    */
+    IMPORT_C CObexUtilsOpaqueData(const TDesC8& aDes);
+
+	/**
+    * Get string from current location. Return error code if invalid string format..
+	* @param	aString buffer to hold the parsed string.
+	* @return	Error code.
+    */
+    IMPORT_C TInt GetString(TBuf8<KObexUtilsMaxOpaqueDataStringLen> &aString);
+
+	/**
+    * Get number from current location. Return error code if invalid string format..
+	* @param	aNumber the parsed number.
+	* @return	Error code.
+    */
+    IMPORT_C TInt GetNumber(TUint &aNumber);
+
+    /*
+	* Peek if next entry is string by looking for a '\'.
+	* @return	TRUE:   is valid string.
+	*			FALSE:	is not string.
+	*/
+    IMPORT_C TBool IsString();
+
+private:
+    TLex8 iData;// data buffer.
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilspropertynotifier.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2004 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:  Declares disk status watcher class for ObexUtils.
+*
+*/
+
+
+
+#ifndef _OBEXUTILSPROPERTYNOTIFIER_H
+#define _OBEXUTILSPROPERTYNOTIFIER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include <UikonInternalPSKeys.h>
+
+// CLASS DECLARATION
+
+	/**
+	Type of memory property check, 
+	@param  ECheckPhoneMemory, phone memory is checked, default value if not mentioned explicitly.	
+    @param  ECheckMMCMemory, MMC memory is checked.	
+	*/
+
+enum TMemoryPropertyCheckType
+	{
+	ECheckPhoneMemory,
+	ECheckMMCMemory
+	};
+
+	/**
+	A callback interface for informing content change of disk status. Client must derive 
+    from this class and implement HandleNotifyL() method. When disk space will cross warning
+    level or critical level this method will be call back.
+    */
+
+NONSHARABLE_CLASS(  MObexUtilsPropertyNotifyHandler )
+	{
+	public:
+        /**
+        * Callback method for disk status change
+        * @param aUid  UID identifying a shared data file where notify came from.
+        * @param aKey  keyword of which value was changed
+        */
+        virtual void HandleNotifyL( TMemoryPropertyCheckType aCheckType ) =0;
+	};
+
+NONSHARABLE_CLASS( CObexUtilsPropertyNotifier ) : public CActive
+	{
+public:  // NewL, Constructors and destructor
+
+    /*
+    * Two-phased constructor.
+    * @param aHandler -Pointer to the MObexUtilsPropertyNotifyHandler derived class
+    * @param aCheckType -Constant defining type of memory checking to be done (phone/MMC)
+    * @return CObexUtilsPropertyNotifier* -Initialized object.
+    */
+
+	IMPORT_C static CObexUtilsPropertyNotifier* NewL(
+	    MObexUtilsPropertyNotifyHandler* aHandler,
+	    TMemoryPropertyCheckType aCheckType=ECheckPhoneMemory );
+
+    /**
+    * Destructor.
+    */
+
+	virtual ~CObexUtilsPropertyNotifier();
+private:  // Functions from base classes
+
+    /**
+    * Constructor.
+    * @param aHandler -Pointer to the MObexUtilsPropertyNotifyHandler derived class
+    * @param aCheckType -Constant defining type of memory checking to be done (phone/MMC)
+    */
+
+	CObexUtilsPropertyNotifier(
+	    MObexUtilsPropertyNotifyHandler* aHandler,
+	    TMemoryPropertyCheckType aCheckType );
+
+	void ConstructL();
+
+	/**
+	Subscribes to a property and sets active
+	*/
+	void Subscribe();
+
+    /**
+    * From CActive Gets called when CActive::Cancel is called, 
+    *              cancels disk status watching.
+    *
+    * @param None.
+    * @return None.
+    */
+
+	void DoCancel();
+
+    /**
+    * From CActive Gets called when content of disk status is changed, 
+    *              calls MObexUtilsPropertyNotifyHandler::HandleNotify.
+    *
+    * @param None.
+    * @return None.
+    */
+
+	void RunL();
+
+private:
+	// Reference to observer
+	MObexUtilsPropertyNotifyHandler* iHandler;
+	// Type of memory check (phone/MMC)
+	TMemoryPropertyCheckType iCheckType;
+	// Database handle	
+	RProperty iProperty;
+	};
+
+#endif  // _OBEXUTILSPROPERTYNOTIFIER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/obexutilsuilayer.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2002 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 COBEXUTILSUILAYER_H
+#define COBEXUTILSUILAYER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <msvapi.h>
+#include <data_caging_path_literals.hrh> 
+#include <AknsUtils.h> 
+#include <eikdialg.h>
+#include <Obexutils.rsg>
+
+// CONSTANTS
+
+const TUid KUidMsgTypeBt                 = {0x10009ED5};
+const TInt KObexUtilsMaxChar             = 80;
+const TInt KObexUtilsMaxCharToFromField  = 256;
+
+// Literals for resource location (drive, directory, file)
+_LIT( KObexUtilsFileDrive, "z:");
+_LIT( KObexUtilsResourceFileName, "obexutils.rsc" );
+
+// Icon file
+_LIT( KCommonUiBitmapFile, "MUIU.MBM" );
+
+// Cover display
+const TInt KEnumStart = 1;  // start of enumerations; start after ECmdNone
+const TInt KResourceNumberMask = 0x00000FFF;
+const TInt KFirstResourceOffset = (R_IR_CONNECTING & KResourceNumberMask);
+
+class CMsvOperation;
+
+// DATA TYPES
+
+enum TContextMedia
+    {
+    EBluetooth,
+    EInfrared,
+	ENfc
+    };
+
+/**
+* Backup status.
+* The value is controlled by FileManager
+*/
+enum TFileManagerBkupStatusType
+    {
+    EFileManagerBkupStatusUnset   = 0x00000000,
+    EFileManagerBkupStatusBackup  = 0x00000001,
+    EFileManagerBkupStatusRestore = 0x00000002
+    };
+
+// CLASS DECLARATION
+
+/**
+*  Utility methods for UI related functionality.
+*  
+*/
+NONSHARABLE_CLASS(  TObexUtilsUiLayer )
+    {
+    public: // New functions
+    
+        typedef CArrayPtr<CFbsBitmap> CBitmapArray;
+        
+        /**
+        * Launches an editor application for the given message.
+        * @param aMessage The message to be launched in an application.
+        * @param aSession A message server session.
+        * @param aObserverRequestStatus Request status of the observer.
+        * @return MSV operation
+        */
+        IMPORT_C static CMsvOperation* LaunchEditorApplicationOperationL( 
+        	CMsvSession& aMsvSession,
+        	CMsvEntry* aMessage,
+            TRequestStatus& aObserverRequestStatus );
+
+        /**
+        * Launches an editor application for the given message.
+        * @param aMessage The message to be launched in an application.
+        * @param aSession A message server session.
+        * @return Symbian OS errorcode.
+        */
+        IMPORT_C static TInt LaunchEditorApplicationL( CMsvEntry* aMessage,
+                                                       CMsvSession& aSession );
+
+        /**
+         * LaunchFileManager by specific path and sort method
+         * @Since S60 v5.0
+         * @param aPath The directory where file manager should open
+         * @param aSortMethod sort method to sort the files in aPath
+         * @param isEmbeddedMode indicates start mode for file manager or standalone mode
+         * @return None 
+         */ 
+        IMPORT_C static void LaunchFileManagerL( TDesC& aPath, TInt aSortMethod, TBool isEmbeddedMode);
+        
+             
+        /**
+         * Open the file by Launching the suitable S60 application  
+         * @Since S60 v5.0
+         * @return None
+         */
+        IMPORT_C static void LaunchEditorApplicationL (TMsvId& aMsvIdParent);
+        
+        /**
+        * Shows an error note.
+        * @param aResourceID A resource id for the note.
+        * @return None.
+        */
+        IMPORT_C static void ShowErrorNoteL( const TInt& aResourceID );
+
+        /**
+        * Shows an information note.
+        * @param aResourceID A resource id for the note.
+        * @return None.
+        */
+        IMPORT_C static void ShowInformationNoteL( const TInt& aResourceID );
+        
+        /**
+        * Reads contents of a resource into a buffer.
+        * @parma aBuf The buffer.
+        * @param aResourceID The id of the resource
+        * @return None.
+        */
+        IMPORT_C static void ReadResourceL( TDes& aBuf,
+                                            const TInt& aResourceID );
+         
+        /**
+        * Shows an global information note.
+        * @param aResourceID A resource id for the note.
+        * @return None.
+        */                                    
+        IMPORT_C static void ShowGlobalConfirmationQueryL( const TInt& aResourceID );
+
+        /**
+         * Show global conformation query without animations or tones.
+         * @Since S60 5.0
+         * @aResourceID aREsourceID for loc string
+         * @return TBool
+         */
+        IMPORT_C static TBool ShowGlobalConfirmationQueryPlainL( const TInt& aResourceID);
+
+        /**
+         * Show global conformation query
+         * @Since S60 5.0
+         * @aResourceID aREsourceID for loc string
+         * @aFilePath location for those files received.
+         * @return TBool
+         */
+        IMPORT_C static TBool ShowGlobalFileOpenConfirmationQueryL( const TInt& aResourceID, const TDesC& aFilePath);
+        
+
+        
+        /**
+        * Returns a resource id for a not supported operation.
+        * @return The resource id.
+        */
+        IMPORT_C static TInt OperationNotSupported();
+        
+        /**
+        * Returns an icon for the given context.
+        * @param aContext The context.
+        * @param aMedia The used media.
+        * @return The resource id of the icon.
+        */
+        IMPORT_C static TInt ContextIcon( const TMsvEntry& aContext,
+                                          TContextMedia aMedia );
+
+        /**
+        * Updates bitmaps accoding to given media.
+        * @param aMedia The used media.
+        * @param aNumberOfZoomStates The media.
+        * @param aBitmapFile The bitmap file.
+        * @param aStartBitmap The resource id of the start bitmap.
+        * @param aEndBitmap The resource id of the start bitmap.
+        * @return None.
+        */
+        IMPORT_C static void UpdateBitmaps( TUid aMedia, 
+                                            TInt& aNumberOfZoomStates, 
+                                            TFileName& aBitmapFile,
+                                            TInt& aStartBitmap,
+                                            TInt& aEndBitmap );
+
+        /**
+        * Create icons according to given media
+        * @param aMedia The used media.
+        * @param aIconArray The IconArray used by the caller
+        */
+        IMPORT_C static void CreateIconsL( TUid aMedia, CArrayPtr<CBitmapArray>* aIconArrays);  
+
+        /**
+         * Checks if backup process is running 
+         */
+        IMPORT_C TBool static IsBackupRunning();
+        
+        /**
+        * Prepares dialog for execution
+        * @param aResourceID Resource ID of the dialog
+        * @param aDialog Dialog
+        */
+        void static PrepareDialogExecuteL( const TInt& aResourceID, CEikDialog* aDialog );
+        
+        /**
+        * Check if cover display is enabled
+        * return True if enabled
+        */
+        TBool static IsCoverDisplayL();
+        
+        /**
+         * Check if process with given id is active now
+         * return True if is active
+         */
+        TBool static ProcessExists( const TSecureId& aSecureId );
+        
+        /**
+         * A dummy class for opening CMsvSession.
+         */
+         class CDummySessionObserver : public CBase , public MMsvSessionObserver
+             {
+             public:
+                 void HandleSessionEventL( TMsvSessionEvent/*aEvent*/,
+                     TAny* /*aArg1*/,
+                     TAny* /*aArg2*/,
+                     TAny* /*aArg3*/ ) {};
+             };
+    };
+
+#endif      // COBEXUTILSUILAYER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/updatemusiccollection.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef UPDATEMUSICCOLLECTION_H_
+#define UPDATEMUSICCOLLECTION_H_
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include <mpxcollectionhelper.h>
+#include <mpxcollectionhelperobserver.h>
+#include <mpxplaybackutility.h>
+
+#include <mpxplaybackobserver.h>
+
+
+class MMPXCollectionHelperObserver;
+class MMPXPlaybackObserver;
+
+NONSHARABLE_CLASS( CUpdateMusicCollection ): public CBase ,
+                                             public MMPXCollectionHelperObserver,
+                                             public MMPXPlaybackObserver
+
+    {
+   
+    public: //cunstructor and distructors
+        
+        static CUpdateMusicCollection* NewL();  // Constructor (public)
+       
+        void ConstructL(); 
+        
+        ~CUpdateMusicCollection();
+        
+    public: //callback functions from the observers
+        
+        // from MMPXCollectionHelperObserver
+        // Called back after a call to
+        // CCollectionHelper::AddL() to provide
+        // status
+        void HandleAddFileCompleteL( TInt aErr ); 
+       
+        // from MMPXPlaybackObserver
+        // If aErr is not KErrNone, plugin might 
+        // still call back with more info in the aMsg.
+        void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError );
+       
+    public: //own function
+        
+        //add the music to misic collection
+        void addToCollectionL(const TDesC& aFileName);
+        
+        //check if the type of the recieved file is supported by music player
+        TInt isSupported (const TDesC16& aPtr); 
+    
+    protected:       
+        
+         CUpdateMusicCollection();
+      
+    private:
+        
+        MMPXCollectionHelper* iCollectionHelper;
+        MMPXPlaybackUtility* iPlaybackUtility;
+    };
+
+#endif /*UPDATEMUSICCOLLECTION_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/inc/vMessageHandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2004 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 VMESSAGEHANDLER_H
+#define VMESSAGEHANDLER_H
+
+//  INCLUDES
+#include <obex.h>
+#include <msvapi.h>
+
+// MACROS
+// None.
+
+// DATA TYPES
+// None.
+
+// FUNCTION PROTOTYPES
+// None.
+
+// FORWARD DECLARATIONS
+// None.
+
+// CLASS DECLARATION
+/**
+*  CSapVMessageParser
+*  
+*/
+NONSHARABLE_CLASS(CSapVMessageParser) : public CBase
+{
+public:
+    /**
+    * Recognises and parses SAP VMessage object
+    * @param aReceivedObject received OBEX object.
+    * @param aMtmID message type.
+    * @param aFile attachment file
+    * @param aMsvSession pointer msvsession.
+    * @param aTime current time.
+    * @return TBool is message recognised and parsed.
+    */   
+    static TBool HandleMessageL(CObexBufObject*  aReceivedObject, const TUid aMtmID,
+                                RFile& aFile, CMsvSession* aMsvSession, TTime aTime);
+private:
+
+typedef enum {
+    ESapVMessageUnknown,
+    ESapVMessageDiscard,
+    ESapVMessageTextSMS,
+    ESapVMessageMMSNotificationInd
+} TSapVMessageType;
+
+typedef enum {
+    ESapVMessageStatusUnknown,
+    ESapVMessageStatusUnread,
+    ESapVMessageStatusRead,
+    ESapVMessageStatusSent
+} TSapVMessageStatus;
+
+private:
+    static CSapVMessageParser* NewLC();
+    void ConstructL();
+    /**
+    * Constructor.
+    * @param None
+    */
+    CSapVMessageParser();
+
+    /**
+    * Recognises and parses SAP VMessage object
+    * @param aReceivedObject received OBEX object.
+    * @param aMtmID message type.
+    * @param aFile attachment file
+    * @param aTime current time.
+    * @return TBool is message recognised and parsed.
+    */   
+    TBool ParseMessageL(CObexBufObject*  aReceivedObject, const TUid aMtmID,
+                        RFile& aFile, TTime aTime);
+
+    /**
+    * Saves parsed message.
+    * @param aMsvSession pointer msvsession.
+    * @return None.
+    */   
+    void SaveSapMessageL(CMsvSession* aMsvSession);
+
+    /**
+    * Saves parsed message as SMS message.
+    * @param aMsvSession pointer msvsession.
+    * @return None.
+    */   
+    void SaveSapSmsL(CMsvSession* aMsvSession);
+
+    /**
+    * Saves parsed message as MMS notification.
+    * @param aMsvSession pointer msvsession.
+    * @return None.
+    */   
+    void SaveSapMmsL(CMsvSession* aMsvSession) const;
+    
+    /**
+    * Recognises active SAP connection
+    * @param None.
+    * @return TBool is SAP connection active.
+    */   
+    static TBool IsSapConnectionActive();
+
+    /**
+    * Checks MIME type
+    * @param aType MIME type.
+    * @return TBool is MIME type for VMessage.
+    */   
+    static TBool CheckMime(const TDesC8& aType);
+
+    /**
+    * Checks name
+    * @param aName file name.
+    * @return TBool is name for SAP VMessage.
+    */   
+    static TBool CheckName(const TDesC& aName);
+
+    /**
+    * Returns Address field of the parsed message
+    * @param None.
+    * @return TDesC address field of the parsed message.
+    */   
+    const TDesC& Address() const;
+
+    /**
+    * Returns Body text of the parsed message
+    * @param None.
+    * @return TDesC body text of the parsed message.
+    */   
+    const TDesC& Message() const;
+
+    /**
+    * Destructor.
+    */
+    ~CSapVMessageParser();
+
+    /**
+    * Parses SAP VMessage object
+    * @param aData VMessage data.
+    * @return None.
+    */   
+    void SimpleParseL(const TDesC8& aData);
+
+    /**
+    * Saves parsed message to Inbox as SMS message.
+    * @param aMsvSession pointer msvsession.
+    * @return None.
+    */   
+    void SaveSmsToInboxL(CMsvSession* aMsvSession, CRichText* aMessage);
+
+    /**
+    * Saves parsed message to Sent folder as SMS message.
+    * @param aMsvSession pointer msvsession.
+    * @return None.
+    */   
+    void SaveSmsToSentL(CMsvSession* aMsvSession, CRichText* aMessage);
+
+private:
+    TSapVMessageType iType;
+    TSapVMessageStatus iStatus;
+    TTime iTimeOriginal;
+    TTime iTimeReceived;
+    HBufC* iAddress;
+    HBufC* iMessage;
+};
+
+#endif //VMESSAGEHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/loc/Obexutils.loc	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2002 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: 
+*     This file contains the localised strings for obexutils.
+*     
+*
+*
+*/
+
+
+//  LOCALISATION STRINGS
+
+// d: descripes status of item that is currently sending state in the outbox.
+// l: list_double_graphic_pane_t2
+//                                                             
+#define qtn_mce_outbox_status_sending      "Sending"
+
+// d: Informs state of IR connection.
+// d: this is the first shown when the user tries connect to other 
+// d: remote device.
+// l: popup_note_wait_window 
+#define qtn_ir_connecting                  "Connecting via Infrared.."
+
+// d: This informs that the IR connection cannot made to other remote device
+// d: for some reason.
+// l: popup_note_window
+#define qtn_ir_cant_establish_conn         "Cannot establish Infrared connection."
+
+// d: This is shown after the IR connection is made succesfully and we are
+// d: sending message over IR.
+// l: popup_note_wait_window 
+#define qtn_ir_sending_data                "Sending message via Infrared..."
+
+// d: This is shown when the IR connection is made and some thing goes wrong
+// d: during connection.
+// l: popup_note_window
+#define qtn_ir_sending_failed              "Failed to send message via Infrared."
+
+// d: This error note is  shown when the Infrared receiving fails for some reason
+// l: popup_note_window
+#define qtn_ir_failed_to_receive              "Receiving failed"
+
+// d: This is shown to the user when the message is sended succesfully.
+// l: popup_note_window
+#define qtn_ir_data_sent                   "Message sent via Infrared!"
+
+// d: Displayed in the "To/From" section for Ir objects in message centre.
+// l: msg_header_pane_t2
+#define qtn_mce_ir_message                 "Infrared message"
+
+// d: This is shown, when the user tries open a message that is not
+// d: supported type.
+// l: popup_note_window
+#define qtn_mce_info_message_not_opened    "Invalid message, can't be opened"
+
+// d: Informs state of Bluetooth connection.
+// d: this is the first shown when the user tries connect to other 
+// d: remote device.
+// l: popup_note_wait_window 
+#define qtn_bt_connecting                  "Connecting..."
+
+// d: This is shown after the Bluetooth connection is made succesfully 
+// d: and we are sending message over Bluetooth.
+// l: popup_note_wait_window 
+#define qtn_bt_sending_data                "Sending message..."
+
+// d: This is shown after the Bluetooth connection is made succesfully 
+// d: and we are receiving message over Bluetooth.
+// l: popup_note_wait_window 
+#define qtn_bt_receiving_data                "Receiving message via Bluetooth"
+
+// d: This wait note is  shown when the device is receiving something over the Infrared
+// l: popup_note_wait_window 
+#define qtn_ir_receiving_data                "Receiving message via Infrared"
+
+// d: This informs that the Bluetooth connection cannot made to other 
+// d: remote device for some reason.
+// l: popup_note_window
+#define qtn_bt_dev_not_avail               "Cannot establish Bluetooth connection"
+
+// d: This is shown to the user when the message is sended succesfully via BT.
+// l: popup_note_window
+#define qtn_bt_data_sent                   "Message sent!"
+
+// d: This is shown when the BT connection is made and some thing goes wrong
+// d: during connection.
+// l: popup_note_window
+#define qtn_bt_failed_to_send              "Failed to send message"
+
+// d: This error note is  shown when the BT receiving fails for some reason
+// l: popup_note_window
+#define qtn_bt_failed_to_receive              "Receiving failed"
+
+// d: Displayed in the filename section for Ir objects in message centre in
+// d: case of the name is corrupted.
+// l: list_double_pane_t2_cp2
+//
+#define qtn_fldr_default_doc_name       "Document"
+
+// BIP usability improvement 
+
+// d: This is shown when one could not be sent
+// l: popup_note_window 
+#define qtn_bt_bip_format_not_supported          "Receiving device does not support this image format."
+
+// d: This is shown when some images could not be sent
+// l: popup_note_window 
+#define qtn_bt_bip_not_all_formats_supported          "Receiving device does not support all needed image formats, Continue?"
+
+// d: This is shown when sending is finished in case some images are not supported.
+// l: popup_note_window
+#define qtn_bt_bip_some_files_sent                "%0N of %1N images sent!"
+
+// d: This is shown when no images could be sent
+// l: popup_note_window 
+#define qtn_bt_bip_no_formats_supported          "Receiving device does not support the needed image formats."
+
+//d: This is shown when one could not be sent
+//l: popup_note_window 
+//r: 3.1
+//w:
+#define qtn_bt_bip_mixed_list          "Receiving device does not support all needed image formats. Send anyway?"
+
+
+//  New loc strings for Req. saving file directly to file system.
+
+//d: This is shown after a single file received.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_single            "File saved in %U. Open now?"
+
+//d: This is shown after a single file received.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_multiple          "Files saved in %U. Open now?"
+
+//d: This is shown when user opens the broken link in inbox.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_search            "File not found, would you like to locate it?"
+
+//d: This is shown when file is originally saved on MMC but mmc is not available.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_no_memory_card    "File not found as memory card is not present. Locate file?"
+
+//d: This is shown when file link is updated.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_link_updated      "File link updated"
+
+//d: This is shown when new selected filename does not match the orignal filename.
+//l: popup_note_window
+//r: 5.0
+#define qtn_bt_saved_search_update     "File names don't match, update link anyway?"
+
+
+
+// -- New string added for CR 403-9991 show filename and size while receiving -- 
+
+
+//d: This is shown while receiving files via either bluetooth or infrared
+//d: and the receiving file size is smaller than a defined limit
+//l: popup_note_wait_window
+//r: 5.0
+#define qtn_bt_ir_receiving_data_size_kb        "Receiving \n%U\n%N kB"
+
+//d: This is shown while receiving files via either bluetooth or infrared
+//d: and the receiving file size is larger than a defined limit
+//l: popup_note_wait_window
+//r: 5.0
+#define qtn_bt_ir_receiving_data_size_mb        "Receiving \n%U\n%N MB"
+
+
+//d: This is shown while receiving files via either bluetooth or infrared
+//d: and the receiving file size is unknown
+//l: popup_note_wait_window
+//r: 5.0
+#define qtn_bt_ir_receiving_data_no_size        "Receiving \n%U"
+
+
+// -- New string added for CR 404-4716 Allow sending unsupported image over BT BIP --
+
+// d: This is shown when one could not be sent
+// l: popup_note_window
+// r: 5.0
+#define qtn_bt_bip_format_not_supported_send      "Receiving device does not support this image format. Send anyway?"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsdialog.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+// INCLUDE FILES
+#include    "obexutilsdialog.h"
+#include    "obexutilsdialogtimer.h"
+#include    "obexutilsuilayer.h"
+#include    <secondarydisplay/obexutilssecondarydisplayapi.h>
+#include    <aknnotewrappers.h>
+#include    <eikprogi.h>
+#include    <Obexutils.rsg>
+#include    <e32def.h>
+#include    <bautils.h>
+#include    <StringLoader.h>
+#include    <featmgr.h>
+#include    "obexutilsdebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CObexUtilsDialog::CObexUtilsDialog( MObexUtilsDialogObserver* aObserverPtr ) : 
+    iDialogObserverPtr( aObserverPtr )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::NewL
+// -----------------------------------------------------------------------------
+EXPORT_C CObexUtilsDialog* CObexUtilsDialog::NewL( MObexUtilsDialogObserver* aObserverPtr )
+    {
+    CObexUtilsDialog* self = new ( ELeave ) CObexUtilsDialog( aObserverPtr );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return( self );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::NewLC
+// -----------------------------------------------------------------------------
+EXPORT_C CObexUtilsDialog* CObexUtilsDialog::NewLC( MObexUtilsDialogObserver* aObserverPtr )
+    {
+    CObexUtilsDialog* self = new ( ELeave ) CObexUtilsDialog( aObserverPtr );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return( self );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::ConstructL
+// Symbian OS default constructor can leave.
+// -----------------------------------------------------------------------------
+void CObexUtilsDialog::ConstructL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::ConstructL()"));
+
+    if (!iDialogObserverPtr)
+        {
+        // The observer pointer was not given as an argument.
+        //
+        User::Leave(KErrArgument);
+        }
+  
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), fileName );
+    iResourceFileId = CCoeEnv::Static()->AddResourceFileL( fileName );
+
+    iCoverDisplayEnabled = IsCoverDisplayL();
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::ConstructL() completed"));
+    } 
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CObexUtilsDialog::~CObexUtilsDialog()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::~CObexUtilsDialog()"));
+
+    CCoeEnv::Static()->DeleteResourceFile( iResourceFileId );
+    delete iObexDialogTimer;
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::~CObexUtilsDialog() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::LaunchProgressDialogL
+// -----------------------------------------------------------------------------
+EXPORT_C void CObexUtilsDialog::LaunchProgressDialogL( 
+    MObexUtilsProgressObserver* aObserverPtr, TInt aFinalValue, 
+    TInt aResId, TInt aTimeoutValue )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::LaunchProgressDialogL()"));
+
+    if ( aObserverPtr )
+        {
+        // The observerPtr was given, so store it and start a timer
+        //
+        iProgressObserverPtr = aObserverPtr;
+
+        if ( iObexDialogTimer )
+            {
+            iObexDialogTimer->Cancel();
+            delete iObexDialogTimer;
+            iObexDialogTimer = NULL;
+            }
+
+        iObexDialogTimer = CObexUtilsDialogTimer::NewL( this );
+        iObexDialogTimer->SetTimeout( aTimeoutValue );
+        }
+
+    iProgressDialogResId = aResId;
+   
+    iProgressDialog = new( ELeave ) CAknProgressDialog( 
+        ( reinterpret_cast<CEikDialog**>( &iProgressDialog ) ), ETrue );
+    PrepareDialogExecuteL( aResId, iProgressDialog );
+    iProgressDialog->ExecuteLD( R_SENDING_PROGRESS_NOTE );
+    
+    HBufC* buf = StringLoader::LoadLC( aResId );
+    iProgressDialog->SetTextL( buf->Des() );
+    CleanupStack::PopAndDestroy( buf );
+
+    iProgressDialog->GetProgressInfoL()->SetFinalValue( aFinalValue );
+    iProgressDialog->SetCallback( this );
+    if ( iProgressObserverPtr )
+        {
+        iObexDialogTimer->Tickle();
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::LaunchProgressDialogL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::LaunchWaitDialogL
+// -----------------------------------------------------------------------------
+EXPORT_C void CObexUtilsDialog::LaunchWaitDialogL( TInt aResId )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::LaunchWaitDialogL()"));
+
+    if ( iWaitDialog || iProgressDialog )
+        {
+        // Allow only one dialog at a time
+        //
+        User::Leave( KErrInUse );
+        }
+
+    iWaitDialog = new( ELeave ) CAknWaitDialog(
+            ( reinterpret_cast<CEikDialog**>( &iWaitDialog ) ), EFalse );
+    
+    iWaitDialog->SetCallback( this );
+    PrepareDialogExecuteL( aResId, iWaitDialog );
+    iWaitDialog->ExecuteLD( aResId );
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::LaunchWaitDialogL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::CancelWaitDialogL
+// -----------------------------------------------------------------------------
+EXPORT_C void CObexUtilsDialog::CancelWaitDialogL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::CancelWaitDialogL()"));
+
+    if( iWaitDialog )
+        {
+        iWaitDialog->SetCallback(NULL);
+        iWaitDialog->ProcessFinishedL();
+        iWaitDialog = NULL;
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::CancelWaitDialogL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::CancelProgressDialogL
+// -----------------------------------------------------------------------------
+EXPORT_C void CObexUtilsDialog::CancelProgressDialogL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::CancelProgressDialogL()"));
+
+    if( iProgressDialog )
+        {        
+        iProgressDialog->SetCallback(NULL);
+        iProgressDialog->ProcessFinishedL();
+        iProgressDialog = NULL;
+
+        if ( iObexDialogTimer )
+            {
+            iObexDialogTimer->Cancel();
+            delete iObexDialogTimer;
+            iObexDialogTimer = NULL;
+            }
+        }  
+        
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::CancelProgressDialogL() completed"));  
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::UpdateProgressDialogL
+// -----------------------------------------------------------------------------
+EXPORT_C void CObexUtilsDialog::UpdateProgressDialogL( TInt aValue, TInt aResId  )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::UpdateProgressDialogL()"));
+
+    if ( iProgressDialog )
+        {
+        iProgressDialog->GetProgressInfoL()->SetAndDraw( aValue );
+        
+        HBufC* buf = StringLoader::LoadLC( aResId );
+        iProgressDialog->SetTextL( buf->Des() );
+        iProgressDialog->LayoutAndDraw();
+        CleanupStack::PopAndDestroy( buf );
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::UpdateProgressDialogL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::DialogDismissedL
+// -----------------------------------------------------------------------------
+void CObexUtilsDialog::DialogDismissedL( TInt aButtonId )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::DialogDismissedL()"));
+
+    // The dialog has already been deleted by UI framework.
+    //
+    if( aButtonId == EAknSoftkeyCancel )
+        {
+        if ( iDialogObserverPtr )
+            {
+            iDialogObserverPtr->DialogDismissed( aButtonId );
+            }
+
+        if ( iObexDialogTimer )
+            {
+            iObexDialogTimer->Cancel();
+            delete iObexDialogTimer;
+            iObexDialogTimer = NULL;
+            }
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::DialogDismissedL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::UpdateProgressDialog
+// -----------------------------------------------------------------------------
+void CObexUtilsDialog::UpdateProgressDialog()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::UpdateProgressDialog()"));
+
+    TRAPD( ignoredError, UpdateProgressDialogL( 
+        iProgressObserverPtr->GetProgressStatus(), iProgressDialogResId ) );
+        
+    if (ignoredError != KErrNone)
+        {
+        FLOG(_L("Ignore this error"));
+        }
+
+    if ( iObexDialogTimer )
+        {
+        iObexDialogTimer->Tickle();
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::UpdateProgressDialog() completed"));
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::LaunchQueryDialogL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CObexUtilsDialog::LaunchQueryDialogL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::LaunchQueryDialogL()"));
+    
+    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+    CleanupStack::PushL( dlg );
+    PrepareDialogExecuteL( aResourceID, dlg );
+    CleanupStack::Pop( dlg );
+    TInt keypress = dlg->ExecuteLD( aResourceID );
+    
+    return keypress;
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::ShowNumberOfSendFileL
+// -----------------------------------------------------------------------------
+//  
+    
+EXPORT_C void CObexUtilsDialog::ShowNumberOfSendFileL( TInt aSentNum, TInt aTotalNum )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialog::ShowNumberOfSendFile()"));
+    
+    CAknInformationNote* myNote = new (ELeave) CAknInformationNote();
+
+    CArrayFix<TInt>* nums = new( ELeave ) CArrayFixFlat<TInt>(3);
+    CleanupStack::PushL(nums);
+    nums->AppendL(aSentNum);  
+    nums->AppendL(aTotalNum);
+    CleanupStack::Pop(nums);
+
+    HBufC* stringholder = StringLoader::LoadLC( R_BT_SENT_IMAGE_NUMBER, *nums); 
+    PrepareDialogExecuteL( R_BT_SENT_IMAGE_NUMBER, myNote );
+    myNote->ExecuteLD( *stringholder );
+    CleanupStack::PopAndDestroy( stringholder );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::PrepareDialogExecuteL
+// -----------------------------------------------------------------------------
+//
+void CObexUtilsDialog::PrepareDialogExecuteL( const TInt& aResourceID, CEikDialog* aDialog )
+    {
+    if (iCoverDisplayEnabled)
+        {
+        TInt dialogIndex =
+            ((aResourceID & KResourceNumberMask) - KFirstResourceOffset) + KEnumStart;
+        aDialog->PublishDialogL( dialogIndex, KObexUtilsCategory );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialog::IsCoverDisplayL()
+// -----------------------------------------------------------------------------
+//
+TBool CObexUtilsDialog::IsCoverDisplayL()
+    {
+    TBool coverDisplay = EFalse;
+	FeatureManager::InitializeLibL();
+	if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
+		{
+		coverDisplay = ETrue;
+		}
+	FeatureManager::UnInitializeLib();
+    return coverDisplay;
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsdialogtimer.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexutilsdialogtimer.h"
+#include "obexutilsdebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CObexUtilsDialogTimer::CObexUtilsDialogTimer( CObexUtilsDialog* aParent)
+                               : CTimer( EPriorityLow ), 
+                                 iParent( aParent )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::ConstructL
+// Symbian OS default constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CObexUtilsDialogTimer::ConstructL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::ConstructL()"));
+
+    CTimer::ConstructL();
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::ConstructL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::NewL
+// -----------------------------------------------------------------------------
+CObexUtilsDialogTimer* CObexUtilsDialogTimer::NewL( CObexUtilsDialog* aParent)
+    {
+    CObexUtilsDialogTimer* self = 
+        new( ELeave ) CObexUtilsDialogTimer( aParent );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CObexUtilsDialogTimer::~CObexUtilsDialogTimer()
+    {
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::Tickle
+// -----------------------------------------------------------------------------
+//
+void CObexUtilsDialogTimer::Tickle()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::Tickle()"));
+
+    Cancel();
+    After( iTimeout );
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::Tickle() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::RunL
+// -----------------------------------------------------------------------------
+//
+void CObexUtilsDialogTimer::RunL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::RunL()"));
+    if (iParent)
+        {
+        iParent->UpdateProgressDialog();
+        }
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsDialogTimer::RunL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsDialogTimer::SetTimeout
+// -----------------------------------------------------------------------------
+//
+void CObexUtilsDialogTimer::SetTimeout( TTimeIntervalMicroSeconds32 aTimeout )
+    {
+    iTimeout = aTimeout;
+    }
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsentryhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2002 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:  Handles the global progress dialog 
+*
+*/
+
+
+
+
+#include <msvstore.h>
+#include <mmsvattachmentmanager.h>
+
+#include "obexutilsentryhandler.h"
+#include "obexutilsdebug.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CObexutilsEntryhandler()
+// ---------------------------------------------------------------------------
+//
+CObexutilsEntryhandler::CObexutilsEntryhandler(): CActive ( EPriorityNormal )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CObexutilsEntryhandler::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// NewL()
+// ---------------------------------------------------------------------------
+//
+CObexutilsEntryhandler* CObexutilsEntryhandler::NewL()
+    {
+    CObexutilsEntryhandler* self = CObexutilsEntryhandler::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewLC()
+// ---------------------------------------------------------------------------
+//
+CObexutilsEntryhandler* CObexutilsEntryhandler::NewLC()
+    {
+    CObexutilsEntryhandler* self = new( ELeave ) CObexutilsEntryhandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// AddLinkAttachment()
+// ---------------------------------------------------------------------------
+//
+TInt CObexutilsEntryhandler::AddEntryAttachment(
+    const TDesC &aFilePath, 
+    CMsvAttachment* anAttachInfo, 
+    CMsvStore* aStore)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::AddEntryAttachment()"));       
+    
+    iStatus = KRequestPending;
+  
+    TRAPD(error, DoAddEntryAttachmentL(aFilePath, anAttachInfo, aStore));
+    if (error != KErrNone )
+        {        
+        //Complete request
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete(status, error);
+        }
+    
+    SetActive();
+    iSyncWaiter.Start();
+    
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::AddEntryAttachment() Done"));
+    return iStatus.Int();
+    }
+
+
+// ---------------------------------------------------------------------------
+// DoAddLinkAttachmentL()
+// ---------------------------------------------------------------------------
+//
+void CObexutilsEntryhandler::DoAddEntryAttachmentL(
+    const TDesC &aFilePath, 
+    CMsvAttachment* anAttachInfo, 
+    CMsvStore* aStore)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoAddEntryAttachmentL()"));   
+        
+    aStore->AttachmentManagerL().AddLinkedAttachmentL(aFilePath,anAttachInfo, iStatus);
+    
+    //Complete request
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+        
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoAddEntryAttachmentL() completed"));  
+    }
+
+// ---------------------------------------------------------------------------
+// UpdateLinkAttachment()
+// ---------------------------------------------------------------------------
+//
+TInt CObexutilsEntryhandler::UpdateEntryAttachment(
+    TFileName& aFileName,
+    CMsvAttachment* anOldAttachInfo,
+    CMsvAttachment* aNewAttachInfo,
+    CMsvStore* aStore)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::UpdateEntryAttachment()"));       
+    
+    iStatus = KRequestPending;
+  
+    TRAPD(error, DoUpdateEntryAttachmentL(aFileName,anOldAttachInfo, aNewAttachInfo, aStore));
+    if (error != KErrNone )
+        {        
+        //Complete request
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete(status, error);
+        }
+       
+    SetActive();
+    iSyncWaiter.Start();
+          
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::UpdateEntryAttachment() Done"));
+    return iStatus.Int();
+    }
+
+// ---------------------------------------------------------------------------
+// DoUpdateEntryAttachmentL()
+// ---------------------------------------------------------------------------
+//
+void CObexutilsEntryhandler::DoUpdateEntryAttachmentL(
+    TFileName& aFileName,
+    CMsvAttachment* anOldAttachInfo,
+    CMsvAttachment* aNewAttachInfo,
+    CMsvStore* aStore)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoUpdateEntryAttachmentL()"));   
+    aStore->AttachmentManagerL().RemoveAttachmentL(anOldAttachInfo->Id(), iStatus);
+    aStore->AttachmentManagerL().AddLinkedAttachmentL(aFileName,aNewAttachInfo, iStatus);
+   
+    //Complete request
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+        
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoUpdateEntryAttachmentL() completed"));  
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// RunL()
+// ---------------------------------------------------------------------------
+//
+void CObexutilsEntryhandler::RunL()
+    {
+    if ( iSyncWaiter.IsStarted() )
+        {
+        iSyncWaiter.AsyncStop();
+        }
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::RunL() Done"));           
+    }
+
+// ---------------------------------------------------------------------------
+// ~CObexutilslinkhandler()
+// ---------------------------------------------------------------------------
+//
+CObexutilsEntryhandler::~CObexutilsEntryhandler()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::Destructor"));     
+    Cancel();    
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CObexutilsEntryhandler::DoCancel()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoCancel()"));           
+    if ( iSyncWaiter.IsStarted() )
+        {
+        iSyncWaiter.AsyncStop();
+        }
+    FLOG(_L("[OBEXUTILS]\t CObexutilsEntryhandler::DoCancel() done"));               
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsglobaldialog.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2002 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:  Handles the global progress dialog for voice recognition
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+
+#include "obexutilsglobalprogressdialog.h"
+#include "obexutilsuilayer.h"
+#include <AknIconUtils.h>
+#include <avkon.mbg>
+#include <avkon.rsg>
+#include <bautils.h>
+#include    "obexutilsdebug.h"
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CGlobalDialog::CGlobalDialog() : CActive(EPriorityNormal)
+   {
+   CActiveScheduler::Add( this );
+   }
+
+// Symbian default constructor can leave.
+void CGlobalDialog::ConstructL(MGlobalNoteCallback* aObserver)
+   {    
+    iKeyCallback = aObserver;
+    iAknGlobalNote = CAknGlobalNote::NewL();
+   }
+
+
+// Two-phased constructor.
+EXPORT_C CGlobalDialog* CGlobalDialog::NewL(MGlobalNoteCallback* aObserver)
+   {
+   CGlobalDialog* self = NewLC(aObserver);
+   CleanupStack::Pop();
+   return self;
+   }
+
+// Two-phased constructor.- stack version
+EXPORT_C CGlobalDialog* CGlobalDialog::NewLC(MGlobalNoteCallback* aObserver)
+   {
+   CGlobalDialog* self=new (ELeave) CGlobalDialog();
+   CleanupStack::PushL(self);
+   self->ConstructL(aObserver);
+   return self;
+   }
+
+EXPORT_C void CGlobalDialog::ShowErrorDialogL(TInt aResourceId)
+{
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    if(!iStringResourceReader)
+    {
+        iStringResourceReader= CStringResourceReader::NewL( fileName );
+    }
+    TPtrC buf;
+    buf.Set(iStringResourceReader-> ReadResourceString(aResourceId)); 
+    iAknGlobalNote->SetSoftkeys(R_AVKON_SOFTKEYS_CLOSE);
+    iAknGlobalNote->ShowNoteL(iStatus,EAknGlobalInformationNote, buf);    
+    FTRACE( FPrint(_L( "[ObexUtils] CGlobalDialog: ShowNoteDialogL buf: \t %S" ), &buf) );
+    SetActive();    
+    
+}
+EXPORT_C void CGlobalDialog::ShowNoteDialogL( TInt aResourceId, TBool anAnimation)
+{
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    if(!iStringResourceReader)
+    {
+        iStringResourceReader= CStringResourceReader::NewL( fileName );
+    }
+    TPtrC buf;
+    buf.Set(iStringResourceReader-> ReadResourceString(aResourceId)); 
+    iAknGlobalNote->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
+    if(anAnimation)
+    {
+        iAknGlobalNote->SetAnimation(R_QGN_GRAF_WAIT_BAR_ANIM);
+    }
+    iAknGlobalNote->ShowNoteL(iStatus,EAknGlobalWaitNote, buf);    
+    FTRACE( FPrint(_L( "[ObexUtils] CGlobalDialog: ShowNoteDialogL buf: \t %S" ), &buf) );
+    SetActive();
+
+}
+
+// Destructor
+CGlobalDialog::~CGlobalDialog()
+   {
+   Cancel();
+   if(iAknGlobalNote)
+   {
+       delete iAknGlobalNote;   
+       iAknGlobalNote = NULL;
+   }
+   
+   delete iStringResourceReader;
+   
+   }
+
+
+
+// ---------------------------------------------------------
+// CGlobalDialog::DoCancel
+// Active object cancel
+// ---------------------------------------------------------
+//
+void CGlobalDialog::DoCancel()
+   {
+      ProcessFinished();
+    if(iStringResourceReader)
+    {
+        delete iStringResourceReader;
+        iStringResourceReader = NULL;
+    }
+   }
+
+// ---------------------------------------------------------
+// CGlobalDialog::RunL
+// Active object RunL
+// ---------------------------------------------------------
+//
+void CGlobalDialog::RunL()
+    {
+
+    FTRACE( FPrint(_L( "[ObexUtils] CGlobalDialog: RunL iStatus.Int():\t %d" ), iStatus.Int() ) );
+    if ( iKeyCallback != NULL )
+        {
+        iKeyCallback->HandleGlobalNoteDialogL(iStatus.Int());
+        }
+    }
+
+// ---------------------------------------------------------
+// CGlobalDialog::ProcessFinished
+// Stops the progress dialog
+// ---------------------------------------------------------
+//
+EXPORT_C void CGlobalDialog::ProcessFinished()
+   { 
+    FLOG( _L( "[ObexUtils] CGlobalDialog::ProcessFinished\t" ) );   
+    delete iAknGlobalNote;
+    iAknGlobalNote = NULL;   
+   }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsglobalprogressdialog.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2002 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:  Handles the global progress dialog 
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+#include <AknGlobalProgressDialog.h>
+#include "obexutilsglobalprogressdialog.h"
+#include "obexutilsuilayer.h"
+#include <StringLoader.h>
+#include <AknIconUtils.h>
+#include <avkon.mbg>
+#include <avkon.rsg>
+#include <bautils.h>
+//#include <BtuiViewResources.rsg>     // Compiled resource ids
+#include <e32math.h>
+
+#include <StringLoader.h>            // Localisation stringloader
+#include <eikenv.h>
+
+#include "obexutilsdebug.h"
+
+const TInt KMaxDisplayFileName = 17;    // used while showing receiving filename. 
+                                        // If the filename is longer than 20 bytes, we make it show only 20 bytes.
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CGlobalProgressDialog::CGlobalProgressDialog() : CActive(EPriorityNormal)
+   {
+   CActiveScheduler::Add( this );
+   }
+
+
+// Symbian default constructor can leave.
+void CGlobalProgressDialog::ConstructL(MGlobalProgressCallback* aObserver)
+   {
+    iProgressDialog = CAknGlobalProgressDialog::NewL();
+    iKeyCallback = aObserver;
+   }
+
+
+// Two-phased constructor.
+EXPORT_C CGlobalProgressDialog* CGlobalProgressDialog::NewL(MGlobalProgressCallback* aObserver)
+   {
+   CGlobalProgressDialog* self = NewLC(aObserver);
+   CleanupStack::Pop();
+   return self;
+   }
+
+// Two-phased constructor.- stack version
+EXPORT_C CGlobalProgressDialog* CGlobalProgressDialog::NewLC(MGlobalProgressCallback* aObserver)
+   {
+   CGlobalProgressDialog* self=new (ELeave) CGlobalProgressDialog();
+   CleanupStack::PushL(self);
+   self->ConstructL(aObserver);
+   return self;
+   }
+
+
+// Destructor
+CGlobalProgressDialog::~CGlobalProgressDialog()
+   {
+   Cancel();
+   delete iProgressDialog;  
+   delete iStringResourceReader;
+   }
+
+
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::DoCancel
+// Active object cancel
+// ---------------------------------------------------------
+//
+void CGlobalProgressDialog::DoCancel()
+   {
+   if ( iProgressDialog )
+      {
+      iProgressDialog->CancelProgressDialog();
+      }
+
+    if(iStringResourceReader)
+    {
+        delete iStringResourceReader;
+        iStringResourceReader = NULL;
+    }
+   }
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::RunL
+// Active object RunL
+// ---------------------------------------------------------
+//
+void CGlobalProgressDialog::RunL()
+    {
+    if ( iKeyCallback != NULL )
+        {
+        iKeyCallback->HandleGlobalProgressDialogL(iStatus.Int());
+        }
+    }
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::SetIconL
+// Set icon on the dialog
+// ---------------------------------------------------------
+//
+void CGlobalProgressDialog::SetIconL( const TDesC& aIconText, const TDesC& aIconFile,
+                                TInt aIconId, TInt aIconMaskId )
+   {
+   iProgressDialog->SetIconL(aIconText, aIconFile, aIconId, aIconMaskId );
+   }
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::SetImageL
+// Set image on the dialog
+// ---------------------------------------------------------
+//
+void CGlobalProgressDialog::SetImageL( const TDesC& aImageFile, TInt aImageId,
+                                 TInt aImageMaskId )
+   {
+   iProgressDialog->SetImageL(aImageFile, aImageId, aImageMaskId);
+   }
+
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::ShowProgressDialogL
+// Shows progress dialog and sets active object active
+// ---------------------------------------------------------
+//
+EXPORT_C void CGlobalProgressDialog::ShowProgressDialogL(TInt aStringId)
+    {
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+
+    if(!iStringResourceReader)
+    {
+        iStringResourceReader= CStringResourceReader::NewL( fileName );
+    }
+    TPtrC buf;
+    //buf.Set(iStringResourceReader-> ReadResourceString(R_BT_RECEIVING_DATA));   
+    buf.Set(iStringResourceReader-> ReadResourceString(aStringId));   
+    iProgressDialog->ShowProgressDialogL( iStatus, buf, R_AVKON_SOFTKEYS_HIDE_CANCEL__HIDE );   
+    //iProgressDialog->ShowProgressDialogL( iStatus, buf, R_BTUI_SOFTKEYS_OPTIONS_EXIT__CHANGE ); //R_OBEXUTILS_SOFTKEYS_HIDE_CANCEL );   
+    SetActive();    
+    }
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::ShowProgressDialogNameSizeL
+// Shows progress dialog and sets active object active
+// ---------------------------------------------------------
+//
+EXPORT_C void CGlobalProgressDialog::ShowProgressDialogNameSizeL(
+    TDesC& aFileName, 
+    TInt64 aFileSize)
+    {
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+
+    if(!iStringResourceReader)
+        {
+        iStringResourceReader= CStringResourceReader::NewL( fileName );
+        }
+    TPtrC buf;
+   
+    
+    TBuf<20> sizeInString;
+    sizeInString.Zero();
+    
+    if ( aFileSize >> 20 )    // size in MB
+        {       
+        TReal sizeInMB = 0;
+        sizeInMB = ((TReal)aFileSize ) / (1024*1024);
+        _LIT16(KFormatTwoDecimal,"%4.2f");  // keep 2 decimals
+        sizeInString.Format(KFormatTwoDecimal,sizeInMB); 
+        buf.Set(iStringResourceReader-> ReadResourceString(R_BT_IR_RECEIVING_DATA_SIZE_MB));
+        }
+    else if( aFileSize >> 10 )        // size in KB
+        {
+        TInt64 sizeInKB = 0;
+        sizeInKB = aFileSize >> 10;
+        sizeInString.AppendNum(sizeInKB); 
+        buf.Set(iStringResourceReader-> ReadResourceString(R_BT_IR_RECEIVING_DATA_SIZE_KB));
+        }
+   else                              // size is unknown or less than 1K
+        {
+        buf.Set(iStringResourceReader-> ReadResourceString(R_BT_IR_RECEIVING_DATA_NO_SIZE));
+        }
+    
+    
+    TBuf<100> tbuf;
+    tbuf.Zero();
+    tbuf.Append(buf);
+    _LIT(KPrefix,"[");
+    _LIT(Ksuffix,"]");
+    TInt prefixPos = tbuf.Find(KPrefix); 
+    if (prefixPos!= KErrNotFound)
+        {
+        TInt keyLength = 0;
+        TInt suffixPos = tbuf.Find(Ksuffix); 
+        keyLength =(tbuf.Mid(prefixPos)).Length()-(tbuf.Mid(suffixPos)).Length()+1;
+        tbuf.Delete(prefixPos, keyLength);  
+        }
+    _LIT(KString,"%U");
+    
+
+        
+    if ( aFileName.Length() > KMaxDisplayFileName )   
+        {
+        // Filename is too long, 
+        // We make it shorter. Hiding the chars in the middle part of filename.       
+        //
+        TFileName shortname;
+        shortname = aFileName.Mid(0,KMaxDisplayFileName/2);
+        shortname.Append(_L("..."));
+        shortname.Append(aFileName.Mid(aFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2));
+        tbuf.Replace(tbuf.Find(KString) , 2, shortname);
+        }
+    else
+        {
+        tbuf.Replace(tbuf.Find(KString) , 2, aFileName);
+        }
+    _LIT(KInt, "%N");
+    if ( sizeInString.Length() > 0 )
+        {
+        tbuf.Replace(tbuf.Find(KInt) , 2, sizeInString);
+        }
+    
+    iProgressDialog->ShowProgressDialogL( iStatus, tbuf, R_AVKON_SOFTKEYS_HIDE_CANCEL__HIDE );
+    SetActive();
+    }
+// ---------------------------------------------------------
+// CGlobalProgressDialog::UpdateProgressDialog
+// Updates the progress dialog
+// ---------------------------------------------------------
+//
+EXPORT_C void CGlobalProgressDialog::UpdateProgressDialog(TInt aValue, TInt aFinalValue)
+   {
+   iProgressDialog->UpdateProgressDialog(aValue, aFinalValue);   
+   }
+
+// ---------------------------------------------------------
+// CGlobalProgressDialog::ProcessFinished
+// Stops the progress dialog
+// ---------------------------------------------------------
+//
+EXPORT_C void CGlobalProgressDialog::ProcessFinished()
+   {
+   iProgressDialog->ProcessFinished();
+   }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilslaunchwaiter.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,414 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikenv.h>
+#include <DocumentHandler.h>
+#include <mmsvattachmentmanager.h>
+#include <msvids.h>
+#include <bautils.h>
+#include <AknCommonDialogsDynMem.h>     // for memory and file selection dialogs
+#include <CommonDialogs.rsg>
+#include <pathinfo.h>                   // for getting drive root path
+#include <Obexutils.rsg>
+#include <AknGlobalNote.h>
+#include <StringLoader.h>
+#include <AiwGenericParam.h>
+#include "obexutilslaunchwaiter.h"
+#include "obexutilsdebug.h"
+#include "obexutilsuilayer.h"            // For launching file manager
+#include "obexutilsmessagehandler.h"            // For updating an entry
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::NewLC
+// -----------------------------------------------------------------------------
+CObexUtilsLaunchWaiter* CObexUtilsLaunchWaiter::NewLC( 
+	CMsvSession& aMsvSession,
+	CMsvEntry* aMessage,
+    TRequestStatus& aObserverRequestStatus )
+    {
+    CObexUtilsLaunchWaiter* self = new( ELeave )CObexUtilsLaunchWaiter( 
+        aMsvSession,
+        aMessage, 
+        aObserverRequestStatus );
+    CleanupStack::PushL( self );
+    self->ConstructL( aMessage );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::NewL
+// -----------------------------------------------------------------------------
+CObexUtilsLaunchWaiter* CObexUtilsLaunchWaiter::NewL(
+	CMsvSession& aMsvSession,
+	CMsvEntry* aMessage,
+    TRequestStatus& aObserverRequestStatus )
+    {
+    CObexUtilsLaunchWaiter* self = CObexUtilsLaunchWaiter::NewLC(
+        aMsvSession,
+        aMessage, 
+        aObserverRequestStatus );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::ConstructL
+// -----------------------------------------------------------------------------
+void CObexUtilsLaunchWaiter::ConstructL( CMsvEntry* aMessage )
+    {
+    if (aMessage->Count() < 1)
+        {
+        User::Leave(KErrOverflow);
+        }
+    
+    CMsvEntry* attachEntry = iMsvSession.GetEntryL(((*aMessage)[0]).Id());
+    CleanupStack::PushL(attachEntry);  // 1st push
+    CMsvStore* store = attachEntry->ReadStoreL();
+    CleanupStack::PushL(store);  // 2nd push
+    
+    CMsvAttachment* attachInfo = store->AttachmentManagerL().GetAttachmentInfoL(0);
+    CleanupStack::PushL(attachInfo); // 3rd push
+          
+    TDataType dataType = attachInfo->MimeType();
+    TFileName filePath;
+    filePath = attachInfo->FilePath();
+  
+    TInt error = KErrNone;
+    TBool isCompleteSelf = EFalse;      
+    CEikonEnv* eikEnv = CEikonEnv::Static();
+
+    if ( attachInfo->Type() == CMsvAttachment::EMsvFile )
+        {
+        RFile attachFile;        
+        TRAP( error, attachFile = store->AttachmentManagerL().GetAttachmentFileL(0));
+        if ( error == KErrNone )
+            {
+            CleanupClosePushL(attachFile);  // 4th push          
+            CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();  // 5th push
+            TAiwGenericParam paramSave(EGenericParamAllowSave, ETrue);
+            paramList->AppendL( paramSave );          
+            
+            if ( eikEnv )
+                {               
+                iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
+                iDocumentHandler->SetExitObserver( this );
+                TRAP( error, iDocumentHandler->OpenFileEmbeddedL(attachFile, dataType, *paramList));               
+                }// eikEnv        
+            CleanupStack::PopAndDestroy(2); // paramList, attachFile
+            }
+        }// EMsvFile
+    
+    if ( attachInfo->Type() == CMsvAttachment::EMsvLinkedFile )
+        {
+        CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();  // 4th push
+        TAiwGenericParam paramSave(EGenericParamFileSaved, ETrue);
+        paramList->AppendL( paramSave );
+        
+        if ( eikEnv )
+            {            
+            iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
+            iDocumentHandler->SetExitObserver( this );
+            RFs rfs;
+            User::LeaveIfError( rfs.Connect() );
+            if ( BaflUtils::FileExists( rfs, filePath ) )                                 
+                {
+                RFile64 shareableFile;
+                TRAP( error, iDocumentHandler->OpenTempFileL(filePath,shareableFile));
+                if ( error == KErrNone)
+                    {
+                    TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList));
+                    }
+                shareableFile.Close();
+                
+                if ( error == KErrNotSupported )  
+                    {                    
+                    delete iDocumentHandler;
+                    iDocumentHandler = NULL;
+                    
+                    const TInt sortMethod = 2;  // 0 = 'By name', 1 = 'By type', 
+                                                // 2 = 'Most recent first' and 3 = 'Largest first'
+                    TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( filePath, 
+                                                                        sortMethod, 
+                                                                        ETrue )); // ETrue -> launch file manager in embedded mode.
+                    isCompleteSelf = ETrue;
+                    }  // KErrNotSupported
+                }            
+            else 
+                {
+                error = KErrNone;
+                TFileName fileName;
+                if (LocateFileL(fileName, filePath))
+                    {
+                    // Update the entry
+                    TRAP(error, TObexUtilsMessageHandler::UpdateEntryAttachmentL(fileName,aMessage));
+                    if ( error == KErrNone )
+                        {
+                        // Show a confirmation note
+                        CAknGlobalNote* note = CAknGlobalNote::NewLC();
+                        HBufC* stringholder  = StringLoader::LoadLC( R_BT_SAVED_LINK_UPDATED );
+                        note->ShowNoteL(EAknGlobalConfirmationNote, *stringholder);
+                        CleanupStack::PopAndDestroy(2); //note and stringholder
+                        }            
+                    }    
+                isCompleteSelf = ETrue;
+                }  
+           
+            rfs.Close();
+            } // eikEnv
+        
+        CleanupStack::PopAndDestroy(); // paramList                                     
+        } // EMsvLinkedFile
+     
+    
+    // Set message to READ     
+    TMsvEntry entry = aMessage->Entry();
+    entry.SetUnread( EFalse );
+    aMessage->ChangeL( entry );
+    
+    User::LeaveIfError ( error );
+    CleanupStack::PopAndDestroy(3); //  attachInfo, store, attachEntry        
+    
+    iObserverRequestStatus = KRequestPending;  // CMsvOperation (observer)
+    iStatus = KRequestPending;  // CMsvOperation
+    SetActive();
+
+    if ( isCompleteSelf )
+        {
+        HandleServerAppExit( error );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CObexUtilsLaunchWaiter::~CObexUtilsLaunchWaiter()
+    {
+    Cancel();
+    if (iDocumentHandler)
+        {
+        delete iDocumentHandler;
+        iDocumentHandler = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::RunL
+// -----------------------------------------------------------------------------
+void CObexUtilsLaunchWaiter::RunL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::RunL()"));
+    
+    TRequestStatus* status = &iObserverRequestStatus;
+    User::RequestComplete( status, KErrNone );
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::RunL() completed"));
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::DoCancel
+// -----------------------------------------------------------------------------
+void CObexUtilsLaunchWaiter::DoCancel()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::DoCancel()"));
+   
+    if ( iStatus == KRequestPending )
+        {
+        TRequestStatus* pstat = &iStatus;
+        User::RequestComplete( pstat, KErrCancel );
+        }
+      
+    if( iObserverRequestStatus == KRequestPending )
+        {
+        TRequestStatus* observerStatus = &iObserverRequestStatus;
+        User::RequestComplete( observerStatus, KErrCancel );
+        }
+
+    
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::DoCancel() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter
+// -----------------------------------------------------------------------------
+CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter( 
+	CMsvSession& aMsvSession,
+	CMsvEntry* /*aMessage*/,
+    TRequestStatus& aObserverRequestStatus )
+    :
+    CMsvOperation(aMsvSession, EPriorityStandard, aObserverRequestStatus),
+    iDocumentHandler(NULL)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter()"));
+
+    CActiveScheduler::Add( this );
+
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::HandleServerAppExit
+// -----------------------------------------------------------------------------
+void CObexUtilsLaunchWaiter::HandleServerAppExit(TInt aReason)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::HandleServerAppExit()"));
+
+    if( iStatus == KRequestPending )
+        {
+        // Complete self
+        //
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, aReason );
+        }
+
+	MAknServerAppExitObserver::HandleServerAppExit( aReason );	
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::HandleServerAppExit() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::ProgressL
+// -----------------------------------------------------------------------------
+const TDesC8& CObexUtilsLaunchWaiter::ProgressL()
+    {
+    return KNullDesC8;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::LocateFile
+// -----------------------------------------------------------------------------
+TBool CObexUtilsLaunchWaiter::LocateFileL(TFileName& aFileName, const TFileName& anOldFileName)
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::LocateFile()"));
+    
+    TBuf<200> buf;
+    TRequestStatus status = KRequestPending;
+    
+    TParse fileParseOld;
+    fileParseOld.Set(anOldFileName, NULL, NULL);
+    TFileName oldName = fileParseOld.NameAndExt();
+            
+    // check old link if the file saved in mmc. If so, check if mmc available. 
+    // if unavailable, show "is File not found as memory card is not present"
+    //
+    TInt err = CheckIfSaveInMMC( anOldFileName );
+    TBool showMMCOut = EFalse;
+    if( err == EDriveF)
+        {
+        if( CheckDriveL(EDriveF) )
+            showMMCOut = ETrue;
+        }
+    else if( err == EDriveE )
+        {
+        if( CheckDriveL(EDriveE) )
+            showMMCOut = ETrue;
+        }
+
+    TBool answer = EFalse;
+    if( showMMCOut )
+        {
+        answer = TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_NO_MEMORY_CARD);
+        }
+    else
+        {
+        answer = TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_SEARCH);
+        }
+   
+    TBool updateLink = EFalse;
+    if ( answer )
+        {
+        updateLink = LaunchFileSelectionDialogL(aFileName, oldName);               
+        }  
+    
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::LocateFile() completed"));
+    return updateLink;
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::LaunchFileSelectionDialogL
+// -----------------------------------------------------------------------------
+TBool CObexUtilsLaunchWaiter::LaunchFileSelectionDialogL(
+    TFileName& aFileName, 
+    const TFileName& anOldName)
+    {
+    TBuf<200> buf;
+    TParse fileParseNew;
+    TFileName nameNew;
+    TBool updateLink = EFalse;
+   
+    while ( !updateLink ) 
+        {
+        TBool isSelected =  AknCommonDialogsDynMem::RunSelectDlgLD( AknCommonDialogsDynMem::EMemoryTypeMMCExternal|
+                                                                    AknCommonDialogsDynMem::EMemoryTypeMMC|
+                                                                    AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage|
+                                                                    AknCommonDialogsDynMem::EMemoryTypePhone,
+                                                                    aFileName,
+                                                                    R_CFD_DEFAULT_SELECT_MEMORY_SELECTION,
+                                                                    R_CFD_DEFAULT_SELECT_FILE_SELECTION );
+        
+        if ( isSelected )
+            {
+            fileParseNew.Set(aFileName, NULL, NULL);
+            nameNew = fileParseNew.NameAndExt();
+            
+            if ( nameNew.Compare(anOldName)) // names do not match
+                {
+                updateLink =  TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_SEARCH_UPDATE);                        
+                }
+            else
+                {
+                updateLink = ETrue;
+                }       
+            }
+        else
+            {
+            break;  // Exit from while loop.
+            }
+        }
+  
+    return updateLink;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::CheckDriveL
+// -----------------------------------------------------------------------------
+TInt CObexUtilsLaunchWaiter::CheckDriveL(TDriveNumber aDriveNumber)
+    {
+    RFs rfs;
+    User::LeaveIfError(rfs.Connect());
+    CleanupClosePushL( rfs ) ;
+    TVolumeInfo volumeInfo;
+    TInt err = rfs.Volume(volumeInfo, aDriveNumber);
+    CleanupStack::PopAndDestroy();    // rfs
+    
+    return err;
+    }
+// -----------------------------------------------------------------------------
+// CObexUtilsLaunchWaiter::CheckIfSaveInMMC
+// -----------------------------------------------------------------------------
+TInt CObexUtilsLaunchWaiter::CheckIfSaveInMMC(const TFileName& aFileName)
+    {
+    if(aFileName.Find(_L("F:")) != KErrNotFound)
+        return EDriveF;
+    if(aFileName.Find(_L("E:")) != KErrNotFound)
+        return EDriveE;
+
+    return KErrNotFound;
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsmessagehandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,1609 @@
+/*
+* Copyright (c) 2002,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: 
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexutilsmessagehandler.h"
+#include "obexutilsuilayer.h"
+#include "obexutilsdebug.h"
+#include "obexutilsentryhandler.h"
+
+#include <msvids.h>
+#include <msvuids.h>
+#include <apgcli.h>
+#include <txtrich.h>
+
+#include <biouids.h>
+#include <Obexutils.rsg>
+#include <bautils.h>
+
+#include <e32property.h>
+#include <UikonInternalPSKeys.h>
+
+#include <mmsvattachmentmanagersync.h>
+#include <mmsvattachmentmanager.h>
+
+#include <centralrepository.h>
+#include <btengdomaincrkeys.h>
+#include "updatemusiccollection.h"
+
+#include <pathinfo.h>          // provides interface for quering system paths 
+
+#ifdef __BT_SAP
+ #include "vMessageHandler.h"
+#endif // __BT_SAP
+
+// CONSTANT
+const TInt KFFSBelowCritical = -2;
+const TInt KRenameOffSet = 4 ;
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// RemoveObexBuffer  Removes Obex buffer object.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::RemoveObexBuffer(CObexBufObject* &aBufObject)
+    {
+    if (aBufObject)
+        {
+        delete aBufObject;
+        aBufObject = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CreateMsvSessionLC  Creates MSV session
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::CreateMsvSessionLC(
+    CDummySessionObserver* &aSessionObs,
+    CMsvSession* &aMsvSession)
+    {
+    aSessionObs = new( ELeave )CDummySessionObserver;
+    CleanupStack::PushL( aSessionObs );  //1st push
+    aMsvSession = CMsvSession::OpenSyncL( *aSessionObs );
+    CleanupStack::PushL( aMsvSession );  //2nd push
+    }
+
+// -----------------------------------------------------------------------------
+// CreateMsvSessionLC  Creates MSV session to selected destination
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::CreateMsvSessionLC(
+    CDummySessionObserver* &aSessionObs,
+    CMsvSession* &aMsvSession,
+    CMsvEntry* &aDestination,
+    TMsvId aMsvId)
+    {
+    CreateMsvSessionLC(aSessionObs, aMsvSession);
+    aDestination = aMsvSession->GetEntryL( aMsvId );
+    CleanupStack::PushL( aDestination );  //3rd push
+    }
+
+// -----------------------------------------------------------------------------
+// GetCenRepKeyIntValueL Gets integer repository value
+// Returns: Error
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetCenRepKeyIntValueL(
+    TUid aRepositoryUid,  // aRepositoryUid Central repository's UID value
+    TUint32 aId,          // Central repository's ID value
+    TInt& aVal)           // Returned integer value
+    {
+    CRepository* storage = CRepository::NewLC( aRepositoryUid );
+    TInt retval = storage->Get( aId, aVal );
+    if (retval != KErrNone)
+        {
+        FLOG(_L("[OBEXUTILS]\t GetCenRepKeyIntValueL() Get failed"));
+        }
+    CleanupStack::PopAndDestroy( storage );
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// GetCurrentTime Gets current time
+// Returns: Current time
+// -----------------------------------------------------------------------------
+//
+TTime TObexUtilsMessageHandler::GetCurrentTime()
+    {
+    TTime time;
+    time.UniversalTime();
+    return time;
+    }
+
+// -----------------------------------------------------------------------------
+// StoreAsRichTextL Change message content to Richtext
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::StoreAsRichTextL( 
+    CMsvEntry* aParentEntry,  // A pointer to new message server entry.
+    RFile& aFile)             // New file to store
+    {
+    FLOG(_L("[OBEXUTILS]\t StoreAsRichTextL()"));
+
+    TInt fileLength = 0;
+    User::LeaveIfError( aFile.Size( fileLength ) );
+
+    // Calculate the number of blocks to read
+    const TInt blockSize = 128 * 1024;
+    TInt fullBlockCnt = fileLength / blockSize;
+    if (fileLength % blockSize > 0)
+        {
+        fullBlockCnt++;
+        }
+
+    CRichText* richText = ConstructRichTextLC(); // 1st, 2nd, 3rd push
+
+    RBuf8 buffer8;
+    CleanupClosePushL(buffer8);  // 4th push
+    buffer8.CreateL( blockSize );
+    RBuf buffer16;
+    CleanupClosePushL(buffer16); // 5th push
+    buffer16.CreateL(blockSize);
+    
+    // Read the file into buffer in small chunks  
+    TInt readBytes = 0;
+    for (TInt i = 0; i < fullBlockCnt; ++i)
+        {
+        User::LeaveIfError( aFile.Read( buffer8 ) );
+    
+        // In order for Bio to understand 8-bit binary data, 
+        // it needs to be stored in wide rich text object
+        // in the low byte of each word with the upper byte as 0.
+        // Do not use UTF8, just convert 8-bit to 16-bit.  
+        buffer16.Copy( buffer8 );
+        
+        richText->InsertL(readBytes, buffer16);
+        readBytes += buffer8.Length();
+        }
+    CleanupStack::PopAndDestroy(2, &buffer8);
+    // -2 pop: free unused memory before StoreBodyTextL()
+
+    CMsvStore* parentStore = aParentEntry->EditStoreL();
+    CleanupStack::PushL(parentStore);   // 4th push
+    parentStore->StoreBodyTextL(*richText);
+    parentStore->CommitL();
+
+    CleanupStack::PopAndDestroy(4);  // parentStore, richText, richParaFormatLayer,
+                                     // richCharFormatLayer
+
+    FLOG(_L("[OBEXUTILS]\t StoreAsRichTextL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// UpdateAttachmentInformationL Add the obex object as a file attachment.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::UpdateAttachmentInformationL(
+    TReceivedData& aRecData,      // The obex received data
+    CMsvEntry* aAttachEntry,      // Attachment entry
+    CMsvAttachment* aAttachInfo,  // Attachment information
+    CMsvStore* aStore)            // Message store (attachment)
+    {
+    FLOG(_L("[OBEXUTILS]\t UpdateAttachmentInformationL()"));
+
+    TMsvEntry attachTEntry = aAttachEntry->Entry();
+
+    SetDetailsLC(attachTEntry.iDescription, aAttachInfo->MimeType());
+    attachTEntry.iSize = aRecData.bytesReceived;
+    attachTEntry.iDate = aRecData.recTime;
+    aAttachEntry->ChangeL(attachTEntry);  // Save properties.
+    CleanupStack::PopAndDestroy(); // unicode in SetDetailsLC
+
+    aAttachInfo->SetSize(aRecData.bytesReceived);
+    aAttachInfo->SetAttachmentNameL(aRecData.msgName);
+    aAttachInfo->SetComplete(ETrue);
+
+    aStore->AttachmentManagerExtensionsL().ModifyAttachmentInfoL(aAttachInfo);
+    
+    FLOG(_L("[OBEXUTILS]\t UpdateAttachmentInformation() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// FinaliseMessageL Save the size of all the attachments and make visible.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::FinaliseMessageL(
+    CMsvEntry* aParentEntry,  // Parent entry
+    TReceivedData& aRecData,  // The obex received data
+    CMsvStore* aStore,        // Attachment's store
+    TBool aIsBioMsg)          // Is BIO message?
+    {
+    FLOG(_L("[OBEXUTILS]\t FinaliseMessageL()"));
+    // Save the size of all the attachment & make visible.   
+    TMsvEntry parentTEntry = aParentEntry->Entry();
+    parentTEntry.iDate = GetCurrentTime();
+    parentTEntry.iSize = aRecData.bytesReceived;
+    parentTEntry.SetUnread(ETrue);
+    
+    // Saved OK. Make the entry visible and flag it as complete.
+    parentTEntry.SetVisible(ETrue);                   // visible
+    parentTEntry.SetInPreparation(EFalse);            // complete
+    if (!aIsBioMsg)
+        {
+        parentTEntry.iDescription.Set(aRecData.msgName);  // "Subject"
+        }
+    aParentEntry->ChangeL(parentTEntry);              // commit changes
+
+    aStore->CommitL();
+    
+    FLOG(_L("[OBEXUTILS]\t FinaliseMessageL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// FinaliseMessageL Save the size of all the attachments and make visible.
+// for Saving file received via BT/IR directly to file system.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::FinaliseMessageL(
+    CMsvEntry* aParentEntry,
+    CMsvStore* aStore,
+    TEntry& aFileEntry,
+    TParse& aFileNameParser)
+    {
+    FLOG(_L("[OBEXUTILS]\t FinaliseMessageL() new "));
+    
+    // Save the size of all the attachment & make visible.
+    TMsvEntry parentTEntry = aParentEntry->Entry();
+    parentTEntry.iDate = GetCurrentTime();
+    parentTEntry.iSize = aFileEntry.iSize;  
+    // Saved OK. Make the entry visible and flag it as complete.
+    parentTEntry.SetVisible(ETrue);                   // visible
+    parentTEntry.SetUnread(ETrue);
+    parentTEntry.SetInPreparation(EFalse);            // complete
+    parentTEntry.iDescription.Set(aFileNameParser.FullName());        // "Subject" 
+    aParentEntry->ChangeL(parentTEntry);              // commit changes
+    aStore->CommitL();
+    
+    FLOG(_L("[OBEXUTILS]\t FinaliseMessageL() new completed "));
+    }
+
+// -----------------------------------------------------------------------------
+// StoreAndUpdateBioMessageL Stores and updates a BIO message
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::StoreAndUpdateBioMessageL(
+    CBIODatabase* aBioDB,     // Bio database
+    TUid aBioMsgId,           // Bio message ID
+    CMsvEntry* parentEntry,   // Parent message entry
+    RFile& aFile)             // File to attachment
+    {
+    FLOG(_L("[OBEXUTILS]\t StoreAndUpdateBioMessageL()"));
+    
+    TInt index;
+    aBioDB->GetBioIndexWithMsgIDL(aBioMsgId, index);
+    
+    StoreAsRichTextL( parentEntry, aFile );
+    
+    TMsvEntry parentTEntry = parentEntry->Entry();
+    parentTEntry.iMtm = KUidBIOMessageTypeMtm;
+    parentTEntry.iServiceId = KMsvLocalServiceIndexEntryId;  
+    parentTEntry.iBioType = aBioMsgId.iUid;
+    parentTEntry.iDescription.Set(aBioDB->BifReader(index).Description());
+    parentEntry->ChangeL(parentTEntry);
+    
+    FLOG(_L("[OBEXUTILS]\t StoreAndUpdateBioMessageL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// RecogniseObjectsL Recognised objects if no type field has been given.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::RecogniseObjectsL(
+    TFileName& aFileName,
+    CMsvAttachment* aAttachInfo)  // Attachment information
+    {
+    FLOG(_L("[OBEXUTILS]\t RecogniseObjectsL()"));
+
+    TPtrC8 mimeType;
+    RApaLsSession lsSess;
+    User::LeaveIfError( lsSess.Connect() );
+    CleanupClosePushL(lsSess);
+    TDataType appDataType;
+    TUid appUid;
+    if (lsSess.AppForDocument(aFileName, appUid, appDataType) == KErrNone)
+        {
+        mimeType.Set(appDataType.Des8());
+        }
+    else
+        {
+        // Don't trust on sender's MIME type here. Just set to empty.
+        mimeType.Set(KNullDesC8);
+        FLOG(_L("[OBEXUTILS]\t RecogniseObjectsL() MIME check failed"));
+        }
+    CleanupStack::PopAndDestroy();  // lsSess
+    HBufC* buf16 = HBufC::NewLC(mimeType.Length());
+    buf16->Des().Copy(mimeType);
+    TPtrC mimeType16(buf16->Des());
+    CleanupStack::PopAndDestroy();   //   buf16
+    
+    CUpdateMusicCollection* updateMusicCollection = CUpdateMusicCollection::NewL() ;
+    if (updateMusicCollection->isSupported(mimeType16))
+        {
+        updateMusicCollection->addToCollectionL(aFileName);
+        }
+    
+    aAttachInfo->SetMimeTypeL( mimeType );
+    
+    FLOG(_L("[OBEXUTILS]\t RecogniseObjectsL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// SaveMimeAndGetBioLC Saves MIME type and gets BIO database for that MIME
+// Returns: BIO database if BIO message
+// -----------------------------------------------------------------------------
+//
+CBIODatabase* TObexUtilsMessageHandler::SaveMimeAndGetBioLC(
+    TFileName& aFileName,
+    RFs& aFsSess,                 // File session
+    CMsvAttachment* aAttachInfo,  // Attachment information
+    TUid &aBioMsgId)              // BIO message ID for data
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveMimeAndGetBioLC()"));
+    
+    RecogniseObjectsL( aFileName, aAttachInfo );
+
+    // For attachments / BIO check.
+    CBIODatabase* bioDB = CBIODatabase::NewLC( aFsSess );  // 1st push
+    
+    // Run through the data objects, seeing if they can be accepted by BIO.
+    // Check if they are bio objects
+
+    TBioMsgIdText bioMessageIdText;
+    SetBioDataTextL( bioMessageIdText, aAttachInfo->MimeType() );
+
+    // Remove any zero termination on mime type
+    //
+    TInt zeroTermination = bioMessageIdText.Locate( TChar(0) ); 
+    
+    if ( zeroTermination != KErrNotFound )
+        {
+        bioMessageIdText.SetLength( zeroTermination );
+        }
+
+    TInt bioMsgErr = bioDB->IsBioMessageL( EBioMsgIdIana, bioMessageIdText, NULL, aBioMsgId );
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveMimeAndGetBioLC() completed"));
+    if (bioMsgErr != KErrNone)
+        {
+        return NULL;
+        }
+    return bioDB;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CreateInboxAttachmentL Creates inbox entry and attachment for it
+// If this leaves, it means the entry and obex object have already been deleted.
+// In this case aMsvIdParent has been set to zero.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::CreateInboxAttachmentL(
+    CObexBufObject* &aBufObject,  // Obex object
+    const TUid aMtmId,            // Mtm ID of the message
+    TMsvId &aMsvIdParent,         // Message ID of the parent message entry
+    RFile &aFile)                 // File to the attachment
+    {
+    TMsvId msvId = 0;
+    TRAPD(retTrap, DoCreateInboxAttachmentL(aMtmId, msvId, aFile,KNullDesC))
+    if (retTrap != KErrNone)
+        {
+        aMsvIdParent = 0;
+        if (msvId)
+            {
+            RemoveInboxEntriesL(aBufObject, msvId);
+            }
+        User::Leave(retTrap);
+        }
+    aMsvIdParent = msvId;
+    }
+
+// -----------------------------------------------------------------------------
+// CreateInboxAttachmentL Creates inbox entry and attachment for it
+// If this leaves, it means the entry and obex object have already been deleted.
+// In this case aMsvIdParent has been set to zero.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::CreateInboxAttachmentL(
+    CObexBufObject* &aBufObject,  // Obex object
+    const TUid aMtmId,            // Mtm ID of the message
+    TMsvId &aMsvIdParent,         // Message ID of the parent message entry
+    RFile &aFile,                 // File to the attachment
+    const TDesC& aRemoteBluetoothName)  // bluetooth name of remote device
+    {
+    TMsvId msvId = 0;
+    TRAPD(retTrap, DoCreateInboxAttachmentL(aMtmId, msvId, aFile,aRemoteBluetoothName))
+    if (retTrap != KErrNone)
+        {
+        aMsvIdParent = 0;
+        if (msvId)
+            {
+            RemoveInboxEntriesL(aBufObject, msvId);
+            }
+        User::Leave(retTrap);
+        }
+    aMsvIdParent = msvId;
+    }
+
+// -----------------------------------------------------------------------------
+// DoCreateInboxAttachmentL Creates inbox entry and attachment for it (private)
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::DoCreateInboxAttachmentL(
+    const TUid aMtmId,     // Mtm ID of the message
+    TMsvId &aMsvIdParent,  // Message ID of the parent message entry
+    RFile &aFile,          // File to the attachment
+    const TDesC& aRemoteBluetoothName)  // bluetooth name of remote device
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateInboxAttachmentL()"));
+    
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* inbox;
+    CreateMsvSessionLC(sessionObs, msvSession, inbox, KMsvGlobalInBoxIndexEntryId);
+    // 1st, 2nd, 3rd push
+
+    TBuf<KObexUtilsMaxCharToFromField> toFrom;
+    TInt resourceId;
+
+    if (aMtmId == KUidMsgTypeBt)
+        {
+        resourceId = R_BT_TO_FROM_IN_INBOX;
+        }
+    else
+        {
+        resourceId = R_IR_TO_FROM_IN_INBOX;
+        }
+   
+    TObexUtilsUiLayer::ReadResourceL( toFrom, resourceId );
+    
+    TMsvEntry parentTEntry;
+    parentTEntry.iMtm = aMtmId;
+    parentTEntry.SetVisible(EFalse); // Make invisible..
+    parentTEntry.SetUnread(ETrue);
+    
+    // ...and in preparation to make sure it gets cleaned up on errors.
+    //
+    parentTEntry.SetInPreparation(ETrue); 
+    parentTEntry.iType = KUidMsvMessageEntry;
+    parentTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;
+    // iDate & iSize will be set later
+    if ( aRemoteBluetoothName.Length() > 0 )
+        {
+        parentTEntry.iDetails.Set(aRemoteBluetoothName);
+        }
+    else
+        {
+        parentTEntry.iDetails.Set(toFrom);
+        }
+    inbox->CreateL(parentTEntry);
+    
+    aMsvIdParent = parentTEntry.Id();
+    
+    // Create attachment for the inbox entry
+    
+    TMsvEntry attachTEntry;
+    attachTEntry.iType      = KUidMsvAttachmentEntry;
+    attachTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;   
+    attachTEntry.iMtm       = aMtmId;
+    
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL(parentEntry);  // 4th push
+    parentEntry->CreateL(attachTEntry);  // create attachment as child of parent
+    
+    // create the v2 attachment, save RFile
+    
+    CMsvEntry* attachEntry = msvSession->GetEntryL(attachTEntry.Id());
+    CleanupStack::PushL(attachEntry);  // 5th push
+    
+    CMsvStore* store = attachEntry->EditStoreL();
+    CleanupStack::PushL(store);  // 6th push
+    CMsvAttachment* attachment = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
+    CleanupStack::PushL(attachment);  // 7th push
+     
+    store->AttachmentManagerExtensionsL().CreateAttachmentL(_L("Unnamed"), aFile, attachment);
+    CleanupStack::Pop(attachment);
+    store->CommitL();
+    // CommitL() required here otherwise EditStoreL() will fail in SaveObjToInbox()
+    
+    CleanupStack::PopAndDestroy(6);
+    // store, attachEntry, parentEntry, inbox, msvSession, sessionObs
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateInboxAttachmentL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::RemoveInboxEntriesL
+// -----------------------------------------------------------------------------
+EXPORT_C void TObexUtilsMessageHandler::RemoveInboxEntriesL(
+    CObexBufObject* &aBufObject, // Obex object
+    TMsvId aMsvIdParent)         // Message ID of the parent message entry
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveInboxEntriesL()"));
+    
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* inbox;
+    CreateMsvSessionLC(sessionObs, msvSession, inbox, KMsvGlobalInBoxIndexEntryId);
+    // 1st, 2nd, 3rd push
+    
+    // Close file
+    
+    RemoveObexBuffer(aBufObject);
+    
+    // Delete parent and descendants
+    if ( aMsvIdParent )
+        {
+        inbox->DeleteL(aMsvIdParent);
+        }
+    
+    CleanupStack::PopAndDestroy(3);
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveInboxEntriesL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::SaveObjToInboxL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::SaveObjToInboxL( 
+    CObexBufObject* /*aReceivedObject*/, const TDesC16& /*aPath*/, const TUid /*aMtmID*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::SaveObjToInboxL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::SaveObjToInboxL(
+    CObexBufObject* &aReceivedObject, // Obex object
+    RFile  &aFile,         
+    TMsvId aMsvIdParent)              // Message ID of the parent message entry
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL()"));
+
+    // Open session. 
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CreateMsvSessionLC(sessionObs, msvSession);  // 1st, 2nd push
+
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL( parentEntry );  // 3rd push
+
+#ifdef __BT_SAP
+    if(CSapVMessageParser::HandleMessageL(aReceivedObject, parentEntry->Entry().iMtm,
+        aFile, msvSession, GetCurrentTime()))
+        {
+        RemoveObexBuffer(aReceivedObject);
+        CMsvEntry* inbox = msvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+        CleanupStack::PushL( inbox );         //4th push
+        inbox->DeleteL(aMsvIdParent);
+        // Close session etc.
+        CleanupStack::PopAndDestroy(4, sessionObs);  // inbox, parentEntry, session, sessionObs
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() completed"));
+        return;
+        }
+#endif // __BT_SAP
+    CMsvEntry* attachEntry = msvSession->GetEntryL(((*parentEntry)[0]).Id());
+    CleanupStack::PushL(attachEntry); // 4th push
+
+    CMsvStore* store = attachEntry->EditStoreL();
+    CleanupStack::PushL( store );  // 5th push
+
+    // Collect obex received data before obex buffer deletion
+
+    TReceivedData receivedData;
+    receivedData.bytesReceived = aReceivedObject->BytesReceived();
+    receivedData.recTime = aReceivedObject->Time();
+
+    RFs& fsSess = msvSession->FileSession();
+    receivedData.msgName = aReceivedObject->Name();
+    MakeValidFileName(fsSess, receivedData.msgName);
+
+    // Rename attachment for MIME type checking
+    
+    RemoveObexBuffer(aReceivedObject);
+    store->AttachmentManagerExtensionsL().RenameAttachmentL(0, receivedData.msgName);
+    RFile newFile = store->AttachmentManagerL().GetAttachmentFileL(0);
+    CleanupClosePushL(newFile);  // 6th push
+    
+    // RenameAttachmentL() modified attachment info, so read it now
+    
+    CMsvAttachment* attachInfo = store->AttachmentManagerL().GetAttachmentInfoL(0);
+    CleanupStack::PushL( attachInfo ); // 7th push
+
+    TUid bioMsgId;  // SaveMimeAndGetBioLC modifies this
+    TFileName fileName;
+    newFile.FullName(fileName);
+    CBIODatabase* bioDB = SaveMimeAndGetBioLC( fileName, fsSess, attachInfo, bioMsgId );
+    // 8th push
+    if (bioDB)  // bio message
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() BIO"));
+        StoreAndUpdateBioMessageL( bioDB, bioMsgId, parentEntry, newFile );
+        FinaliseMessageL(parentEntry, receivedData, store, ETrue);
+        TMsvId attachId = attachEntry->EntryId();
+        CleanupStack::PopAndDestroy(5);  // bioDB, attachInfo, newFile (close),
+                                         // store, attachEntry
+        // PopAndDestroying here because open store locks the entry,
+        // it can be deleted only after destroying the store pointer
+        parentEntry->DeleteL(attachId);  // invalidate unused attachment
+        CleanupStack::PopAndDestroy(3);  // parentEntry, msvSession, sessionObs
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() BIO completed"));
+        }
+    else  // attachment message
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() Attachment"));
+        CleanupStack::PopAndDestroy();   // bioDB
+        UpdateAttachmentInformationL(receivedData, attachEntry, attachInfo, store);
+        CleanupStack::Pop(attachInfo);   // ownership taken by ModifyAttachmentInfoL()
+        FinaliseMessageL(parentEntry, receivedData, store, EFalse);
+        CleanupStack::PopAndDestroy(6);  // newFile (close), store, attachEntry,
+                                         // parentEntry, msvSession, sessionObs
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() Attachment completed"));
+        }
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveObjToInboxL() completed"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// GetCenRepKeyStringValueL Gets integer repository value
+// Returns: Error
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetCenRepKeyStringValueL(
+    TUid aRepositoryUid,  // aRepositoryUid Central repository's UID value
+    TUint32 aId,          // Central repository's ID value
+    TDes& aVal)           // Returned String
+    {
+    CRepository* storage = CRepository::NewLC( aRepositoryUid );
+    TInt retval = storage->Get( aId, aVal );
+    if (retval != KErrNone)
+        {
+        FLOG(_L("[OBEXUTILS]\t GetCenRepKeyStringValueL() Get failed"));
+        }
+    CleanupStack::PopAndDestroy( storage );
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// CreateReceiveBufferL Creates an Obex receive buffer object and RFile object.
+// Returns: Symbian error code
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TInt TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL(
+    RFile& aFile,
+    const TDesC& aPath,
+    TFileName& aFullName, 
+    CBufFlat* &aReceiveObject, 
+    const TInt aBufSize )  
+    {
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL()"));
+    
+    aReceiveObject = CBufFlat::NewL(aBufSize); 
+    aReceiveObject->ResizeL(aBufSize);
+    
+    
+    RFs rfs;
+    User::LeaveIfError( rfs.Connect() );
+    if ( !BaflUtils::FolderExists( rfs, aPath ) )
+        {
+        User::LeaveIfError(rfs.MkDirAll(aPath));
+        }
+    User::LeaveIfError( aFile.Temp( rfs, aPath, aFullName, EFileWrite) );
+    // Set temp file  hidden file.
+    //
+    TUint setAttMask(0);
+    TUint clearAttMask(0);
+    aFile.SetAtt(setAttMask | KEntryAttHidden, clearAttMask);
+    aFile.Flush();
+    aFile.Close();
+    
+    RFile logFile;
+    TFileName logFilePath;
+    TFileName cenRepFolder;
+    GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder,cenRepFolder);
+    
+    logFilePath.Zero();
+    logFilePath.Append(PathInfo::PhoneMemoryRootPath());
+    logFilePath.Append(cenRepFolder);
+    
+    if ( !BaflUtils::FolderExists(rfs , logFilePath) )
+        {
+        User::LeaveIfError(rfs.MkDirAll(logFilePath));
+        }
+    logFilePath.Append(_L("log.txt"));
+    if ( !BaflUtils::FileExists( rfs, logFilePath ))
+        {
+        logFile.Create(rfs, logFilePath, EFileWrite);
+        }
+    else
+        {
+        User::LeaveIfError(logFile.Open(rfs, logFilePath, EFileWrite));
+        }
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL()    log.txt is created"));
+    TFileText ft;              
+    ft.Set(logFile);
+    ft.Write(aFullName);    // restore tempfilename in logfile
+
+    // Set log file 
+    logFile.SetAtt(setAttMask | KEntryAttHidden, clearAttMask);
+    logFile.Flush();
+    logFile.Close();
+    rfs.Close();
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL() completed"));
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::RemoveTemporaryRFileL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::RemoveTemporaryRFileL ( const TFileName& aFullName )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveTemporaryRFileL()"));
+    RFs rfs;
+    User::LeaveIfError(rfs.Connect());
+    
+    TParse fileNameParser;
+    User::LeaveIfError(fileNameParser.Set(aFullName, NULL, NULL));
+    
+    TFileName logFilePath;
+    TFileName cenRepFolder;
+    GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder,cenRepFolder);
+    logFilePath.Zero();
+    logFilePath.Append(PathInfo::PhoneMemoryRootPath());
+    logFilePath.Append(cenRepFolder);
+    logFilePath.Append(_L("log.txt"));
+            
+    if ( fileNameParser.Ext().Compare(_L(".$$$")) == 0  )                                                                           
+        {
+        // aFullName is a temp file name, we need to remove it.        
+        rfs.Delete( aFullName );
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveTemporaryRFileL() temp file is removed (bt off)"));
+        }
+    else if ( (aFullName.Length() == 0) && BaflUtils::FileExists(rfs, logFilePath))
+        {
+        RFile logFile;
+        User::LeaveIfError(logFile.Open(rfs, logFilePath, EFileRead));
+        TFileText ft;
+        ft.Set(logFile);
+        TFileName tempFileName;
+        ft.Read(tempFileName);  // read tempfile name stored in logfile.
+        
+        if ( tempFileName.Length() > 0 )
+            {
+            rfs.Delete(tempFileName);
+            }
+        logFile.Close();   
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveTemporaryRFileL() temp files are removed (reboot)"));
+        }              
+    rfs.Delete( logFilePath );
+    rfs.Close();
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::RemoveTemporaryRFileL() completed"));
+    }
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::SaveFileToFileSystemL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::SaveFileToFileSystemL(
+    CObexBufObject* &aReceivedObject,
+    const TUid aMtmId,
+    TMsvId& aMsvIdParent,
+    TFileName& aFullName, 
+    RFile& aFile,
+    const TDesC& aSenderBluetoothName)
+    {
+   
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveFileToFileSystemL()"));
+    // Create inbox entry ( this was done in CreateAttachment() before )
+    //
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* inbox;
+    CreateMsvSessionLC(sessionObs, msvSession, inbox, KMsvGlobalInBoxIndexEntryId);
+    // 1st, 2nd, 3rd push
+
+    TBuf<KObexUtilsMaxCharToFromField> toFrom;
+    TInt resourceId;
+
+    if (aMtmId == KUidMsgTypeBt)
+        {
+        resourceId = R_BT_TO_FROM_IN_INBOX;
+        }
+    else
+        {
+        resourceId = R_IR_TO_FROM_IN_INBOX;
+        }
+    // NOTE: toFrom will be updated to Bluetooth sender's name
+    //
+    TObexUtilsUiLayer::ReadResourceL( toFrom, resourceId );  // read the toForm ( will be updated to sender's bt name in the future ) 
+
+    TMsvEntry parentTEntry;   
+    parentTEntry.iMtm = aMtmId;
+    parentTEntry.SetVisible(EFalse); // Make invisible..
+    parentTEntry.SetUnread(ETrue);  //  Set msg to Unread
+        
+    // ...and in preparation to make sure it gets cleaned up on errors.
+    //
+    parentTEntry.SetInPreparation(ETrue); 
+    parentTEntry.iType = KUidMsvMessageEntry;
+    parentTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;
+    // iDate & iSize will be set later
+    if ( aSenderBluetoothName.Length() > 0 )
+        {
+        parentTEntry.iDetails.Set(aSenderBluetoothName);
+        }
+    else
+        {
+        parentTEntry.iDetails.Set(toFrom);
+        }
+    inbox->CreateL(parentTEntry);
+        
+    aMsvIdParent = parentTEntry.Id();
+        
+    // Create attachment for the inbox entry
+    
+    TMsvEntry attachTEntry;
+    attachTEntry.iType      = KUidMsvAttachmentEntry;
+    attachTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;   
+    attachTEntry.iMtm       = aMtmId;
+     
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL(parentEntry);  // 4th push
+    parentEntry->CreateL(attachTEntry);  // create attachment as child of parent
+  
+    // Check if message is sap message
+    // If we delete parent entry in sap, we have to delete the RFile object ourself as well )
+    //
+    RFs& fsSess = msvSession->FileSession();
+    TFileName tempFullName;
+    aFile.FullName(tempFullName);
+    
+#ifdef __BT_SAP   
+    if(CSapVMessageParser::HandleMessageL(aReceivedObject, parentEntry->Entry().iMtm,
+            aFile, msvSession, GetCurrentTime()))
+        {
+        RemoveObexBuffer(aReceivedObject);
+        CMsvEntry* inbox = msvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+        CleanupStack::PushL( inbox );         //5th push
+        inbox->DeleteL(aMsvIdParent);
+        fsSess.Delete(tempFullName);  // we have to use fullname to delete the file object in file system 
+        // Close session etc.
+        CleanupStack::PopAndDestroy(5, sessionObs);  // inbox, parentEntry, session, sessionObs
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveFileToFileSystemL() completed"));
+        return;
+        }
+#endif // __BT_SAP
+
+    // Collect obex received data before obex buffer deletion
+    TReceivedData receivedData;
+    receivedData.bytesReceived = aReceivedObject->BytesReceived();
+    receivedData.recTime = aReceivedObject->Time();
+    receivedData.msgName = aReceivedObject->Name();
+    
+    TFileName filename;
+    TParse parse;
+    parse.Set(aFullName, NULL, NULL);
+    filename.Copy(receivedData.msgName);
+    FixExtremeLongFileName(filename, parse.DriveAndPath());
+    MakeValidFileName( fsSess, filename);     
+    RemoveObexBuffer(aReceivedObject);
+
+    // We set file to visible before renaming 
+    // so that photo/music app can scan the media files we recevie. 
+    //
+    // Set file back to visible
+    //
+    TUint setAttMask(0);
+    TUint clearAttMask(0);
+    User::LeaveIfError(aFile.Open(fsSess,tempFullName,EFileWrite));
+    User::LeaveIfError(aFile.SetAtt(setAttMask , clearAttMask | KEntryAttHidden));
+    aFile.Close();
+    
+    
+    // Move file to the actual drive and directory
+    // as well rename the file with the correct file name instead of temporary name 
+    // tempFullName will be updated in RenameFileL()    
+    TInt error = RenameFileL(tempFullName, filename, parse.DriveAndPath(), fsSess);
+    
+    if ( error != KErrNone )
+        {
+        fsSess.Delete(tempFullName);   // If rename fails, we remove the temp RFile object.
+        }
+    aFullName = tempFullName; // assign new full Name back to aFullName,which goes back to caller
+    
+    CleanupStack::PopAndDestroy(4);         // parentEntry, inbox, msvSession, sessionObs
+     
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::SaveFileToFileSystemL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::AddEntryToInboxL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::AddEntryToInboxL( 
+    TMsvId& aMsvIdParent,
+    TFileName& aFullName)
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::AddEntryToInboxL() "));
+        
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CreateMsvSessionLC(sessionObs, msvSession);
+    // 1st, 2nd push
+        
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL(parentEntry);  // 3th push
+    
+    CMsvEntry* attachEntry = msvSession->GetEntryL(((*parentEntry)[0]).Id());
+    CleanupStack::PushL(attachEntry); // 4th push
+            
+    CMsvStore* store = attachEntry->EditStoreL();
+    CleanupStack::PushL( store );  // 5th push
+        
+    CObexutilsEntryhandler* entryHandler = CObexutilsEntryhandler::NewL();
+    CleanupStack::PushL(entryHandler);  // 6th push  
+                
+    CMsvAttachment* attachInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvLinkedFile);
+    CleanupStack::PushL(attachInfo);  // 7th push
+           
+    // Create attachment Info
+    //
+    RFs& fsSess = msvSession->FileSession();
+        
+    TParse fileNameParser;
+    User::LeaveIfError(fileNameParser.Set(aFullName, NULL, NULL));
+    attachInfo->SetAttachmentNameL( fileNameParser.FullName());
+                 
+    TEntry fileEntry;
+    User::LeaveIfError(fsSess.Entry( fileNameParser.FullName(), fileEntry) );
+    attachInfo->SetSize(fileEntry.iSize);
+            
+    // check if it's the bio message
+           
+    TUid bioMsgId;  // SaveMimeAndGetBioLC modifies this
+    CBIODatabase* bioDB = SaveMimeAndGetBioLC( aFullName, fsSess, attachInfo, bioMsgId );
+    // 8th push
+    if (bioDB)  // bio message
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::AddEntryToInboxL() BIO"));
+    
+        RFile file;
+        User::LeaveIfError(file.Open(fsSess,aFullName,EFileRead));
+        TReceivedData receivedData;
+        receivedData.bytesReceived = fileEntry.iSize;
+        receivedData.recTime = fileEntry.iModified;
+        receivedData.msgName = fileNameParser.Name();     
+                    
+        StoreAndUpdateBioMessageL( bioDB, bioMsgId, parentEntry, file );
+        FinaliseMessageL(parentEntry, receivedData, store, ETrue);
+        TMsvId attachId = attachEntry->EntryId();
+        file.Close();
+        fsSess.Delete(aFullName);
+        CleanupStack::PopAndDestroy(5);  // bioDB, attachInfo, linkHandler,
+                                             // store, attachEntry
+            
+        // PopAndDestroying here because open store locks the entry,
+        // it can be deleted only after destroying the store pointer
+        parentEntry->DeleteL(attachId);  // invalidate unused attachment
+        CleanupStack::PopAndDestroy(3);  // parentEntry, msvSession, sessionObs
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::AddEntryToInboxL() BIO completed"));
+        }
+    else
+        {
+
+        CleanupStack::PopAndDestroy();  // bioDB
+        // Add entry to Inbox
+        entryHandler->AddEntryAttachment(aFullName, attachInfo, store);
+        CleanupStack::Pop(attachInfo);   // attachInfo, Pass ownership to store
+        CleanupStack::PopAndDestroy(entryHandler);  // entryHandler
+        FinaliseMessageL(parentEntry, store,fileEntry, fileNameParser);
+        CleanupStack::PopAndDestroy(5);         // linkHandler, attachInfo, store, attachEntry,
+                                                    // parentEntry, msvSession, sessionObs                            
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::AddEntryToInboxL() completed "));
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::AddEntryToInboxL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::AddEntryToInboxL( 
+    TMsvId& aMsvIdParent,
+    TFileName& aFullName,
+    RArray<TMsvId>* aMsvIdArray)
+    {
+    AddEntryToInboxL(aMsvIdParent, aFullName);
+    aMsvIdArray->Append(aMsvIdParent);
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::UpdateEntryAttachmentL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::UpdateEntryAttachmentL ( 
+    TFileName& aFullName,
+    CMsvEntry* aParentEntry)
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::UpdateEntryAttachmentL() "));
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CreateMsvSessionLC(sessionObs, msvSession);
+    // 1st, 2nd push
+      
+    CMsvEntry* attachEntry = msvSession->GetEntryL(((*aParentEntry)[0]).Id());
+    CleanupStack::PushL(attachEntry); // 3th push
+            
+    CMsvStore* store = attachEntry->EditStoreL();
+    CleanupStack::PushL( store );  // 4th push
+  
+    CObexutilsEntryhandler* entryHandler = CObexutilsEntryhandler::NewL();
+    CleanupStack::PushL(entryHandler);  // 5th push  
+    
+    // Note:
+    // Because setFilePath() in CMsvAttachment is not implementated by Symbian yet, 
+    // we have to delete the original attachment and add another new one to fix the broken link.
+    //
+    
+    // remove the old attachment first.
+    //
+    store->AttachmentManagerExtensionsL().RemoveAttachmentL(0);
+    // Create a new attachment.
+    //
+    CMsvAttachment* attachInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvLinkedFile);
+    CleanupStack::PushL(attachInfo);  // 6th  push
+    
+    // Get mime type
+    //
+    RecogniseObjectsL(aFullName, attachInfo);
+    RFs& fsSess = msvSession->FileSession();
+    
+    TParse fileNameParser;
+    User::LeaveIfError(fileNameParser.Set(aFullName, NULL, NULL));
+    attachInfo->SetAttachmentNameL(fileNameParser.NameAndExt());
+    TEntry fileEntry;
+    User::LeaveIfError(fsSess.Entry( fileNameParser.FullName(), fileEntry) );
+    attachInfo->SetSize(fileEntry.iSize);
+
+    entryHandler->AddEntryAttachment(aFullName,attachInfo, store);
+    CleanupStack::Pop(attachInfo);   // attachInfo, Pass ownership to store
+    CleanupStack::PopAndDestroy(entryHandler);  // entryHandler
+    FinaliseMessageL(aParentEntry, store,fileEntry, fileNameParser);
+    CleanupStack::PopAndDestroy(4);   // store, 
+                                      // attachEntry, msvSession, sessionObs
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::UpdateEntryAttachmentL() completed "));
+    }
+
+
+// Common methods
+
+// -----------------------------------------------------------------------------
+// ConstructRichTextLC Handles rich text initialisation.
+// Returns: CRichText* A pointer to the rich text.
+// -----------------------------------------------------------------------------
+//
+CRichText* TObexUtilsMessageHandler::ConstructRichTextLC()
+    {
+    FLOG(_L("[OBEXUTILS]\t ConstructRichTextLC()"));
+
+    CParaFormatLayer* richParaFormatLayer = CParaFormatLayer::NewL();
+    CleanupStack::PushL( richParaFormatLayer );
+
+    CCharFormatLayer* richCharFormatLayer = CCharFormatLayer::NewL(); 
+    CleanupStack::PushL( richCharFormatLayer );
+    CRichText* richText = CRichText::NewL( richParaFormatLayer, 
+                                           richCharFormatLayer );
+    CleanupStack::PushL(richText);
+
+    FLOG(_L("[OBEXUTILS]\t ConstructRichTextLC() completed"));
+
+    return richText;
+    }
+
+// -----------------------------------------------------------------------------
+// MakeValidFileName Rename the given filename to a valid filename.
+// Removes invalid characters from a filename; if no characters left, filename
+// is set to R_NAME_FOR_INVALID_FILE
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::MakeValidFileName( 
+    RFs& aFileSession, // A reference to file server session.
+    TDes& aFileName )  // The filename to modify.
+    {
+    FLOG(_L("[OBEXUTILS]\t MakeValidFileName()"));
+
+    TParse fileParse;
+    fileParse.Set(aFileName, NULL, NULL);
+    
+    TBool nameempty = ETrue;
+    if (fileParse.NameOrExtPresent())
+        {        
+        aFileName = fileParse.NameAndExt();
+        nameempty=EFalse;
+        TText badChar;    
+        TInt nameLength = aFileName.Length();
+    
+        while ( !aFileSession.IsValidName(aFileName, badChar) )
+            {
+            // Locate and delete all instances of the bad char
+            FOREVER
+                {
+                TInt index = aFileName.Locate(TChar(badChar)); 
+                nameLength--;
+                if (index == KErrNotFound)
+                    {
+                    break;
+                    }             
+                aFileName.Delete(index,1);               
+                }
+                if ( nameLength <= 0 )
+                    {
+                    break;
+                    }
+            }    
+        }    
+    
+    // Did we delete all the characters? If so then we must have some filename
+    if ( aFileName.Length() == 0 || nameempty )
+        {
+        TInt resourceId = R_NAME_FOR_INVALID_FILE;
+        TRAPD( retVal, TObexUtilsUiLayer::ReadResourceL( aFileName, resourceId ) );
+        if (retVal != KErrNone)
+            {
+            FLOG(_L("TObexUtilsMessageHandler::MakeValidFileName failed."));
+            }
+        }
+
+    FLOG(_L("[OBEXUTILS]\t MakeValidFileName() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::CreateOutboxEntryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMsvId TObexUtilsMessageHandler::CreateOutboxEntryL(
+    const TUid& aMtm,          // Message type id
+    const TInt& aResourceID )  // Resource id for the message entry text
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateOutboxEntryL()"));
+
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* outBoxEntry;
+    CreateMsvSessionLC(sessionObs, msvSession, outBoxEntry, KMsvGlobalOutBoxIndexEntryId);
+    // 1st, 2nd, 3rd push
+
+    TBuf<KObexUtilsMaxCharToFromField> toFrom;
+    TObexUtilsUiLayer::ReadResourceL( toFrom, aResourceID );
+
+    // Message entry fields
+    TMsvEntry newTEntry;
+    newTEntry.SetVisible( ETrue );          // Make visible
+    newTEntry.SetInPreparation( ETrue );    // and in preparation to make sure gets cleaned up on errors.
+    newTEntry.iDetails.Set( toFrom );       // To/From field on Outbox
+    newTEntry.SetSendingState( KMsvSendStateSending );
+    newTEntry.iType = KUidMsvMessageEntry;      
+    newTEntry.iMtm = aMtm;                  // message type id 
+    newTEntry.iServiceId = KMsvGlobalOutBoxIndexEntryId;
+    outBoxEntry->CreateL( newTEntry );
+    
+    CleanupStack::PopAndDestroy(3);         //outBoxEntry, msvSession, sessionObs
+    return newTEntry.Id();
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::DeleteOutboxEntryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::DeleteOutboxEntryL( const TMsvId& aMessageServerIndex )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::DeleteOutboxEntryL()"));
+
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* outBoxEntry;
+    CreateMsvSessionLC(sessionObs, msvSession, outBoxEntry, KMsvGlobalOutBoxIndexEntryId);
+    // 1st, 2nd, 3rd push
+
+    outBoxEntry->DeleteL( aMessageServerIndex );
+
+    CleanupStack::PopAndDestroy(3);         //outBoxEntry, msvSession, sessionObs
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::GetFileSystemStatus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetFileSystemStatus()
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetFileSystemStatus()"));
+
+    /**
+    *  Free space level of FFS file system (drive C:)
+    *  The integer value may be:
+    *       0: Free space OK
+    *      -1: Free space at or below warning level
+    *      -2: Free space at or below critical level
+    */
+    
+    TInt status = KErrNone;
+    TInt retVal = KErrNone;
+    
+    retVal = GetPubSubKeyIntValue(KPSUidUikon, KUikFFSFreeLevel, status);
+    if ( ( retVal == KErrNone ) && ( status == KFFSBelowCritical ) )
+        {
+        retVal = KErrDiskFull;
+        }
+     
+    FTRACE(FPrint(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetFileSystemStatus completed with %d."), retVal));
+    return retVal;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::GetMmcFileSystemStatus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetMmcFileSystemStatus()
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetMmcFileSystemStatus()"));
+
+    /**
+    *  Free space level of FFS file system (MMC)
+    *  The integer value may be:
+    *       0: Free space OK
+    *      -1: Free space at or below warning level
+    *      -2: Free space at or below critical level
+    */
+   
+    TInt retVal = KErrNone;
+    TInt status = KErrNone;
+    
+    retVal = GetPubSubKeyIntValue(KPSUidUikon, KUikMmcFFSFreeLevel, status);
+    if ( ( retVal == KErrNone ) && ( status == KFFSBelowCritical ) )
+        {
+        retVal = KErrDiskFull;
+        }
+    
+    FTRACE(FPrint(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetMmcFileSystemStatus completed with %d."), retVal));
+    return retVal;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::GetMessageCentreDriveL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetMessageCentreDriveL()
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetMessageCentreDriveL()"));
+    
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CreateMsvSessionLC(sessionObs, msvSession);  // 1st, 2nd push
+    
+    TDriveUnit driveUnit = msvSession->CurrentDriveL();
+    CleanupStack::PopAndDestroy(2);  // msvSession, sessionObs
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::GetMessageCentreDriveL() Completed"));
+    return driveUnit;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsMessageHandler::CreateDefaultMtmServiceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsMessageHandler::CreateDefaultMtmServiceL(TUid aMtm)
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateDefaultMtmServiceL()"));
+    
+    CDummySessionObserver* sessionObs;
+    CMsvSession* msvSession;
+    CMsvEntry* root;
+    CreateMsvSessionLC(sessionObs, msvSession, root, KMsvRootIndexEntryId);
+    // 1st, 2nd, 3rd push
+    
+    TMsvSelectionOrdering msvSelectionOrdering = root->SortType();
+    msvSelectionOrdering.SetShowInvisibleEntries( ETrue );
+    root->SetSortTypeL( msvSelectionOrdering );
+    
+    CMsvEntrySelection* sel = root->ChildrenWithMtmL( aMtm );
+    CleanupStack::PushL( sel );  // 4th push
+    if (sel->Count() == 0)
+        {
+        TMsvEntry serviceEntry;
+        serviceEntry.iMtm = aMtm;
+        serviceEntry.iType = KUidMsvServiceEntry;
+        serviceEntry.SetVisible(EFalse);
+        serviceEntry.SetReadOnly(ETrue);
+        serviceEntry.SetInPreparation(EFalse);
+        root->CreateL(serviceEntry);
+        }
+    CleanupStack::PopAndDestroy(4);  // sel, root, msvSession, sessionObs
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::CreateDefaultMtmServiceL() Completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// GetCenRepKeyIntValue Gets integer value for a specified CenRep key
+// Returns: CenRep key's value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsMessageHandler::GetPubSubKeyIntValue(
+    TUid aCategory,  // Category of the key
+    TUint aKey,      // PUBSUB key
+    TInt& value)     // Returned value
+    {
+    TInt retVal;
+    RProperty property;
+    retVal = property.Attach(aCategory, aKey);
+    if ( retVal == KErrNone )
+        {
+        retVal = property.Get(value);
+        if (retVal != KErrNone)
+            {
+            FLOG(_L("[OBEXUTILS]\t GetPubSubKeyIntValue() Get failed for CenRep key"));
+            }
+        }
+    else
+        {
+        FLOG(_L("[OBEXUTILS]\t GetPubSubKeyIntValue() Attach failed for CenRep key"));
+        }
+    property.Close();
+    return retVal;
+    }
+
+// -----------------------------------------------------------------------------
+// SetBioDataTextL Converts message type to bio message id.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::SetBioDataTextL(
+    TBioMsgIdText& aText, // A bio message id text.
+    const TDesC8& aType ) // The type of the content. 
+    {
+    FLOG(_L("[OBEXUTILS]\t SetBioDataTextL()"));
+
+    HBufC16* unicode = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aType );
+    CleanupStack::PushL( unicode );
+    
+    if (unicode->Length() > KMaxBioIdText )
+        {
+        User::Leave( KErrOverflow );
+        }
+    
+    aText = unicode->Des();
+    CleanupStack::PopAndDestroy( unicode );
+    
+    FLOG(_L("[OBEXUTILS]\t SetBioDataTextL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// SetDetailsLC Converts message type to unicode.
+// Returns: None.
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::SetDetailsLC(
+    TPtrC& aDetails,      // A message text.
+    const TDesC8& aType ) // The type of the content.
+    {
+    FLOG(_L("[OBEXUTILS]\t SetDetailsLC()"));
+
+    HBufC16* unicode = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aType );
+    CleanupStack::PushL( unicode );
+    aDetails.Set(unicode->Des());
+
+    FLOG(_L("[OBEXUTILS]\t SetDetailsLC() completed"));
+    }
+
+//-------------------------------------------------------------------------------
+// Rename a file and move file if needed 
+// Return: None.
+//-------------------------------------------------------------------------------
+//
+TInt TObexUtilsMessageHandler::RenameFileL(
+    TFileName& aFileName, 
+    TFileName& aNewFileName,
+    const TDesC& aNewPath, 
+    RFs& aFileSession)
+    {
+    
+    // We move the file to the final location
+    //
+    CFileMan* fileMan= CFileMan::NewL(aFileSession);
+    CleanupStack::PushL(fileMan);       
+    TPtrC tmpNewPath;
+    TParse fileParse;
+    fileParse.Set(aFileName, NULL, NULL);
+    
+    TInt error = fileMan->Move(aFileName,aNewPath,CFileMan::ERecurse );
+    
+    // if error while moving to new location, keep file in old location and change file name
+    if (error != KErrNone)
+        {
+        tmpNewPath.Set (fileParse.DriveAndPath()); 
+        }
+    else
+        {
+        tmpNewPath.Set (aNewPath);
+        }
+    
+    CleanupStack::PopAndDestroy(fileMan);
+
+    TFileName tempFile;
+    tempFile.Append(tmpNewPath);
+    tempFile.Append(fileParse.NameAndExt());
+    aFileName = tempFile;
+    
+    // check the duplicated file name. if so, we renamed in a different way. 
+    TInt segmentNum = 0;
+    TBuf<64> segmentString;
+    
+    TFileName newFullName;
+    newFullName.Zero();
+    newFullName.Append(tmpNewPath);
+    newFullName.Append(aNewFileName);
+    
+    aFileSession.SetSessionPath(tmpNewPath);
+    
+    while ( BaflUtils::FileExists(aFileSession, newFullName) )    
+        {
+        segmentNum++;
+        User::LeaveIfError( RenameFileWithSegmentNumL(aNewFileName, segmentNum, segmentString) );
+        newFullName.Zero();
+        newFullName.Append(tmpNewPath);
+        newFullName.Append(aNewFileName);
+        }
+    // rename the file.
+    //
+    error = aFileSession.Rename(aFileName, newFullName);
+
+    aFileName = newFullName;
+    
+    return error;
+    }
+
+//-------------------------------------------------------------------------------
+// Rename a file by adding a additional segment string
+// Return: None.
+//-------------------------------------------------------------------------------
+//
+TInt TObexUtilsMessageHandler::RenameFileWithSegmentNumL(
+    TDes &aFileName,        // name for the file 
+    TInt aSegmentNum,       // segment number
+    TDes &aSegmentString)   // segment String with parenthesis
+    {
+    
+    FLOG(_L("[OBEXUTILS]\t RenameFileWithSegmentNumL()"));
+
+    const char KDot = '.';
+    const char KLeftParenthesis = '(';
+    const char KRightParenthesis = ')';
+    
+    // Convert Integer to String
+    // 
+    TBuf<64> buf;
+    buf.Zero();
+    _LIT(KNum, "%d" );
+    buf.AppendFormat(KNum, aSegmentNum);
+    
+    // Rules to modify the duplicated filenames.
+    // case 1: No extention in filename,  we append aSegmentString directly.
+    // case 2: Filename with extention, we insert aSegmentString right before dot (.)
+    // case 3: Filename with aSegmentString is still duplicated, 
+    //         we remove the old aSegmentString from aFileName and add a new one and add a new aSegmentString.
+    
+    TInt posOfDot = aFileName.LocateReverse(KDot);
+    
+    if ( aSegmentNum > 1 )   // filename with aSegementString is still duplicated
+        {
+        // In case the original file name contains the same string as our aSegmentString
+        // eg 1 with ext. original filename is file(1).txt, after renaming, it is changed to file(1)(1).txt.
+        // eg 2 without ext. original filename is file(1), after renaming, it is changed to file(1)(1).
+        TInt posDeleteStarts = posOfDot == KErrNotFound ? 
+                                aFileName.Length() - aSegmentString.Length() :
+                                posOfDot - aSegmentString.Length();
+                                
+        aFileName.Delete(posDeleteStarts, aSegmentString.Length());
+        }
+    
+    // Construct (New) aSegmentString
+    aSegmentString.Zero();
+    aSegmentString.Append(KLeftParenthesis);
+    aSegmentString.Append(buf);
+    aSegmentString.Append(KRightParenthesis);
+    
+    // 
+    // If the length of new filename will be larger than KMaxFileName, we remove few chars from the end of aFilename 
+    // in order to add aSegmentString without panic.
+    // 
+    if ( KMaxFileName < (aFileName.Length() + aSegmentString.Length()))
+        {
+        aFileName.Delete(KMaxFileName - aSegmentString.Length(), KMaxFileName - aFileName.Length());
+        }
+    
+    posOfDot = aFileName.LocateReverse(KDot);
+    if ( posOfDot == KErrNotFound )   
+        {
+        // aFileName has no extension
+        // we append the modification to aFileName
+        //
+        aFileName.Append(aSegmentString);
+        }
+    else
+        {
+        // Dot (.) is found, we insert the modifications before dot.
+        //
+        aFileName.Insert(posOfDot,aSegmentString);
+        
+        }
+    
+    FLOG(_L("[OBEXUTILS]\t RenameFileWithSegmentNumL() completed"));
+    return KErrNone;
+    }
+
+//-------------------------------------------------------------------------------
+// Shorten an extreme long file name
+// Return: None.
+//-------------------------------------------------------------------------------
+//
+void TObexUtilsMessageHandler::FixExtremeLongFileName(TFileName& aExtremeLongFileName, const TDesC& aDriveAndPath)
+     {
+     FLOG( _L( "[OBEXUTILS]\t FixExtremeLongFileName() ") );
+     const char KDot = '.';
+     TInt combinedLength = aExtremeLongFileName.Length() + aDriveAndPath.Length();
+     
+     if ( combinedLength > aExtremeLongFileName.MaxLength() )
+        {
+        FLOG( _L( "[OBEXUTILS]\t FixExtremeLongFileName: combinedLenght > aExtremeLongFileName.MaxLength()\t") );
+         //KDefaultFileExtensionSeparator
+         TFileName tempFileName;
+         TInt dotPos = aExtremeLongFileName.LocateReverse( KDot );    
+         TInt overLap = combinedLength - aExtremeLongFileName.MaxLength() + KRenameOffSet;  
+ 
+         if ( dotPos > 0 )
+             {
+             tempFileName.Copy( aExtremeLongFileName.Left( dotPos - overLap ) );
+             tempFileName.Append( aExtremeLongFileName.Right( aExtremeLongFileName.Length() - dotPos ) );  
+             }
+         else
+             {
+             tempFileName.Copy( aExtremeLongFileName.Left(aExtremeLongFileName.Length() - overLap ) );
+             }
+         aExtremeLongFileName.Copy( tempFileName );
+         }
+     FLOG( _L( "[OBEXUTILS]\t FixExtremeLongFileName() completed") );
+     }
+
+//  End of File  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsopaquedata.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexutilsopaquedata.h"
+
+// ================= MEMBER FUNCTIONS =======================
+EXPORT_C CObexUtilsOpaqueData::CObexUtilsOpaqueData(const TDesC8& aDes):iData(aDes)
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// GetString
+// Get string from current location. Return error code if invalid string format.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CObexUtilsOpaqueData::GetString(TBuf8<KObexUtilsMaxOpaqueDataStringLen> &aString)
+    {
+    // reset the output string
+    aString.Zero();
+
+    if (iData.Eos())
+        return KErrNotFound ;
+    TChar c;
+    TInt ret;
+    while(c=iData.Get())
+        {
+        if(c=='\\')
+            {
+            switch(iData.Peek())
+                {
+            case 'x':
+            case 'X':
+                // parse hex number
+                TUint8 val;
+                iData.Inc();
+                ret=iData.Val(val,EHex);
+                if(ret == KErrNone)
+                    aString.Append(val);
+                else
+                    return ret;
+                break;
+            case '|':
+                iData.Inc();
+                aString.Append('|');
+                break;
+            case '\\':
+                iData.Inc();
+                aString.Append('\\');
+                break;
+            default:
+                // if not a decimal number, then bad format
+                TInt8 dval;
+                ret=iData.Val(dval);
+                if(ret == KErrNone)
+                    aString.Append(dval);
+                else
+                    return ret;
+                }
+            }
+        else if(c=='|')
+            {
+            if(iData.Peek()=='|')
+                {
+                // delimiter "||" found, end of the string
+                iData.Inc();
+                break;
+                }
+            else
+                aString.Append(c);
+            }
+        else
+            aString.Append(c);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// GetNumber
+// Get number from current location. Return error code if invalid number format.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CObexUtilsOpaqueData::GetNumber(TUint &aNumber)
+    {
+    if (iData.Eos())
+        return KErrNotFound ;
+
+    //  skip dilimiter
+    if(iData.Peek()=='|')
+        {
+        iData.Inc();
+        if(iData.Peek()=='|')
+            iData.Inc();
+        else
+            return KErrNotFound ;
+        }
+
+    if(iData.Peek()=='0')
+        {
+        iData.Inc();
+        if(iData.Peek()=='x' || iData.Peek()=='X')
+            {
+            iData.Inc();
+            return iData.Val(aNumber,EHex);
+            }
+        else
+            {
+            iData.UnGet();
+            return iData.Val(aNumber,EOctal);
+            }
+        }
+    else
+        {
+        return iData.Val(aNumber);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// IsString
+// Peek if next entry is string by looking for a '\'.
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CObexUtilsOpaqueData::IsString()
+    {
+    return iData.Peek()=='\\';
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilspropertynotifier.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2004 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:  Declares disk status watcher class for ObexUtils.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "obexutilspropertynotifier.h"
+#include "obexutilsdebug.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+EXPORT_C CObexUtilsPropertyNotifier* CObexUtilsPropertyNotifier::NewL(
+    MObexUtilsPropertyNotifyHandler* aHandler,
+    TMemoryPropertyCheckType aCheckType )
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::NewL()"));
+    CObexUtilsPropertyNotifier* self=new(ELeave) CObexUtilsPropertyNotifier(aHandler, aCheckType);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::NewL() completed"));
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CObexUtilsPropertyNotifier::CObexUtilsPropertyNotifier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CObexUtilsPropertyNotifier::CObexUtilsPropertyNotifier(
+    MObexUtilsPropertyNotifyHandler* aHandler,
+    TMemoryPropertyCheckType aCheckType )
+    : CActive( EPriorityNormal ), iHandler ( aHandler ), iCheckType ( aCheckType )
+    {
+    CActiveScheduler::Add(this);
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::CObexUtilsPropertyNotifier() completed"));
+    }
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+//
+CObexUtilsPropertyNotifier::~CObexUtilsPropertyNotifier()
+    {
+    Cancel();
+    iProperty.Close();
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::~CObexUtilsPropertyNotifier() completed"));
+    }
+
+// ---------------------------------------------------------
+// CObexUtilsPropertyNotifier::ConstructL
+// ---------------------------------------------------------
+//
+void CObexUtilsPropertyNotifier::ConstructL()
+    {   
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::ConstructL()"));
+    if (iCheckType == ECheckPhoneMemory)
+        {
+        FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::ConstructL() Phone"));
+        User::LeaveIfError(iProperty.Attach(KPSUidUikon,KUikFFSFreeLevel));
+        }
+    else
+        {
+        FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::ConstructL() MMC"));
+        User::LeaveIfError(iProperty.Attach(KPSUidUikon,KUikMmcFFSFreeLevel));
+        }
+    Subscribe();
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::ConstructL() completed"));
+    }
+
+// ---------------------------------------------------------
+// CObexUtilsPropertyNotifier::Subscribe
+// ---------------------------------------------------------
+//
+void CObexUtilsPropertyNotifier::Subscribe()
+    {
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::Subscribe() completed"));
+    }
+
+// ---------------------------------------------------------
+// CObexUtilsPropertyNotifier::DoCancel
+// ---------------------------------------------------------
+//
+void CObexUtilsPropertyNotifier::DoCancel()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::DoCancel()"));
+    iProperty.Cancel();
+    }
+
+// ---------------------------------------------------------
+// CObexUtilsPropertyNotifier::RunL
+// ---------------------------------------------------------
+//
+void CObexUtilsPropertyNotifier::RunL()
+    {
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::RunL()"));
+    
+    Subscribe();
+    
+    TInt memorystatus;
+    if ((iProperty.Get(memorystatus)!=KErrNotFound) && (memorystatus!=0))
+        {
+            FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::RunL() notify"));
+            TRAPD(retTrap, iHandler->HandleNotifyL( iCheckType ));
+            retTrap = retTrap;
+            FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::RunL() notify completed"));
+        }
+    FLOG(_L("[OBEXUTILS]\t CObexUtilsPropertyNotifier::RunL() completed"));
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/obexutilsuilayer.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,628 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexutilsuilayer.h"
+#include "obexutilslaunchwaiter.h"
+#include "obexutilsdebug.h"
+
+#include <secondarydisplay/obexutilssecondarydisplayapi.h>
+#include <Obexutils.rsg>
+#include <aknnotewrappers.h>
+#include <AknGlobalConfirmationQuery.h>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#ifdef NO101APPDEPFIXES
+#include <muiu.mbg>
+#else   //NO101APPDEPFIXES
+enum TMuiuConsts
+    {
+    EMbmMuiuQgn_prop_mce_ir_unread = 16402,
+    EMbmMuiuQgn_prop_mce_ir_unread_mask = 16403,
+    EMbmMuiuQgn_prop_mce_ir_read = 16404,
+    EMbmMuiuQgn_prop_mce_ir_read_mask = 16405,
+    EMbmMuiuQgn_prop_mce_bt_unread = 16406,
+    EMbmMuiuQgn_prop_mce_bt_unread_mask = 16407,
+    EMbmMuiuQgn_prop_mce_bt_read = 16408,
+    EMbmMuiuQgn_prop_mce_bt_read_mask = 16409
+    };
+#endif  //NO101APPDEPFIXES
+#include <bautils.h>
+#include <featmgr.h>
+
+#include <stringresourcereader.h>
+#include <StringLoader.h>
+
+// Launching file manager related header files 
+#include <AiwServiceHandler.h> // The AIW service handler
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <AknLaunchAppService.h>  //  Used to launch file manager in embedded mode.
+#include <e32property.h> //for checking backup status
+
+//Constants
+const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3
+const TInt KUiNumberOfZoomStates = 2;          // second for the mask
+const TInt KSortNumMax = 2;
+const TInt KNfcUnreadIconIndex = 10;
+const TInt KNfcReadIconIndex = 8;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::LaunchEditorApplicationOperationL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMsvOperation* TObexUtilsUiLayer::LaunchEditorApplicationOperationL( 
+	CMsvSession& aMsvSession,
+	CMsvEntry* aMessage,
+    TRequestStatus& aObserverRequestStatus )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::LaunchEditorApplicationOperationL()"));
+    CObexUtilsLaunchWaiter* waiterOperation = CObexUtilsLaunchWaiter::NewL(
+        aMsvSession,
+        aMessage, 
+        aObserverRequestStatus );
+    
+    return waiterOperation;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::LaunchEditorApplication
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::LaunchEditorApplicationL( CMsvEntry* /*aMessage*/,
+                                                           CMsvSession& /*aSession*/ )
+    {
+    // Obsolete
+    return KErrNotSupported;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::LaunchFileManager
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::LaunchFileManagerL( 
+     TDesC& aPath, 
+     TInt aSortMethod, 
+     TBool isEmbeddedMode )
+    {  
+    if ( isEmbeddedMode )
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() Embedded mode"));
+        
+        CAiwGenericParamList* inParams = CAiwGenericParamList::NewLC();
+        inParams->AppendL(TAiwGenericParam( EGenericParamDir, TAiwVariant( aPath ) ) );
+        inParams->AppendL(TAiwGenericParam( EGenericParamDir, TAiwVariant( aSortMethod ) ) );
+       
+        CAknLaunchAppService* launchService = CAknLaunchAppService::NewL(TUid::Uid( KFileManagerUID3 ), // Use File Manager app UID directly
+                                                                         NULL, 
+                                                                         inParams ); 
+        CleanupStack::PopAndDestroy( inParams );
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() Embedded mode completed "));
+        }
+    else
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() "));
+        TApaAppInfo appInfo;
+        RApaLsSession apaLsSession;
+        User::LeaveIfError( apaLsSession.Connect() );
+        CleanupClosePushL( apaLsSession );
+        User::LeaveIfError( apaLsSession.GetAppInfo( appInfo, TUid::Uid( KFileManagerUID3 ) ) ); // Use File Manager app UID directly
+        CApaCommandLine* apaCmdLine = CApaCommandLine::NewLC();
+        apaCmdLine->SetExecutableNameL( appInfo.iFullName );
+        apaCmdLine->SetCommandL( EApaCommandOpen );
+        apaCmdLine->SetDocumentNameL( aPath );
+        TBuf8<KSortNumMax> sortMode; 
+        sortMode.AppendNum( aSortMethod );
+        apaCmdLine->SetTailEndL( sortMode );
+        TThreadId dummy;
+        User::LeaveIfError( apaLsSession.StartApp( *apaCmdLine, dummy ) );
+        CleanupStack::PopAndDestroy( apaCmdLine );
+        CleanupStack::PopAndDestroy( &apaLsSession ); 
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() standalone mode completed "));
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::LaunchEditorApplication
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::LaunchEditorApplicationL (TMsvId& aMsvIdParent)
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchEditorApplication() "));
+    CDummySessionObserver* sessionObs = new( ELeave )CDummySessionObserver;
+    CleanupStack::PushL( sessionObs );  //1st push
+    CMsvSession* msvSession = CMsvSession::OpenSyncL( *sessionObs ); 
+    CleanupStack::PushL( msvSession );  //2nd push
+    
+    // 1st, 2nd push?
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL(parentEntry);  // 3th push    
+    
+    TRequestStatus status = KRequestPending;
+    CObexUtilsLaunchWaiter* waiterOperation = CObexUtilsLaunchWaiter::NewL(
+                                                                    *msvSession,
+                                                                    parentEntry,
+                                                                    status);
+    CleanupStack::PopAndDestroy(3); // parentEntry, sessionObs, msvSession
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchEditorApplication() completed "));         
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowErrorNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowErrorNoteL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowErrorNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    ReadResourceL( textdata, aResourceID );
+    
+    CAknErrorNote* note = new( ELeave )CAknErrorNote( ETrue );
+    CleanupStack::PushL( note );
+    PrepareDialogExecuteL( aResourceID, note );
+    CleanupStack::Pop( note );
+    note->ExecuteLD( textdata );
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowErrorNoteL() completed"));
+
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowInformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowInformationNoteL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowInformationNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    ReadResourceL( textdata, aResourceID );
+
+    CAknInformationNote* note = new( ELeave )CAknInformationNote;
+    CleanupStack::PushL( note );
+    PrepareDialogExecuteL( aResourceID, note );
+    CleanupStack::Pop( note );
+    note->ExecuteLD( textdata );
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowInformationNoteL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalInformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowGlobalConfirmationQueryL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowGlobalInformationNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    TRequestStatus status;    
+    
+    ReadResourceL( textdata, aResourceID );    	    
+    CAknGlobalConfirmationQuery* note = CAknGlobalConfirmationQuery::NewLC();        
+    
+    status=KRequestPending;
+    note->ShowConfirmationQueryL(status,
+                                textdata, 
+                                R_AVKON_SOFTKEYS_OK_EMPTY, 
+                                R_QGN_NOTE_ERROR_ANIM,KNullDesC,
+                                0,
+                                0,
+                                CAknQueryDialog::EErrorTone
+                                );    
+    User::WaitForRequest(status);
+    
+    CleanupStack::PopAndDestroy(note );    
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowGlobalInformationNoteL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL( const TInt& aResourceID)
+    {
+    CAknGlobalConfirmationQuery* pQ = CAknGlobalConfirmationQuery::NewL();
+    CleanupStack::PushL(pQ);
+    HBufC* stringholder = NULL;
+    stringholder = StringLoader::LoadLC( aResourceID);
+    TRequestStatus status = KRequestPending;
+    pQ->ShowConfirmationQueryL(status,*stringholder,R_AVKON_SOFTKEYS_YES_NO);
+    User::WaitForRequest(status);
+    CleanupStack::PopAndDestroy(2);//PQ and Stringholder
+    return (status.Int() == EAknSoftkeyYes);        
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalFileOpenConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::ShowGlobalFileOpenConfirmationQueryL( const TInt& aResourceID, const TDesC& aFilePath)
+    {
+    // Read string from resource file
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    CStringResourceReader* stringResourceReader = CStringResourceReader::NewL(fileName);
+    CleanupStack::PushL(stringResourceReader);
+    const TDesC& resString = stringResourceReader->ReadResourceString(aResourceID);
+    RBuf manipString;
+    manipString.Assign(resString.AllocL());
+    CleanupStack::PopAndDestroy(stringResourceReader);
+    manipString.CleanupClosePushL();
+    
+    // Remove bracket section
+    _LIT(KPrefix, "[");
+    _LIT(KSuffix, "]");
+    TInt prefixPos = manipString.Find(KPrefix); 
+    if (prefixPos != KErrNotFound)
+        {
+        TInt keyLength = 0;
+        TInt suffixPos = manipString.Find(KSuffix); 
+        keyLength = (manipString.Mid(prefixPos)).Length()-(manipString.Mid(suffixPos)).Length()+1;
+        manipString.Delete(prefixPos, keyLength);  
+        }
+    
+    // Replace "%U" string parameter with file path
+    _LIT(KString, "%U");
+    TInt replacePos = manipString.Find(KString); 
+    if( replacePos == KErrNotFound )
+        {
+        User::Leave(KErrNotFound);
+        }
+    const TInt minRequiredSize = manipString.Length() - KString().Length() + aFilePath.Length();
+    // ensure that the buffer is big enough (otherwise re-alloc)
+    if(manipString.MaxLength() < minRequiredSize)
+        {
+        manipString.ReAllocL(minRequiredSize);
+        }
+    manipString.Replace(replacePos, KString().Length(), aFilePath);
+    
+    // Initiate query dialog
+    TRequestStatus status = KRequestPending;
+    
+    CAknGlobalConfirmationQuery* pQ = CAknGlobalConfirmationQuery::NewL();
+    CleanupStack::PushL(pQ);
+    pQ->ShowConfirmationQueryL(status, manipString, R_AVKON_SOFTKEYS_YES_NO);
+    User::WaitForRequest(status);
+    CleanupStack::PopAndDestroy(2, &manipString); // pQ, manipString
+    return (status.Int() == EAknSoftkeyYes);
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ReadResourceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ReadResourceL( TDes& aBuf, const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ReadResourceL()"));
+
+    RFs fileSession;
+    CleanupClosePushL<RFs>( fileSession );
+    User::LeaveIfError( fileSession.Connect() );
+    
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    BaflUtils::NearestLanguageFile( fileSession, fileName );
+    
+    RResourceFile resourcefile;
+    CleanupClosePushL<RResourceFile>( resourcefile );
+    resourcefile.OpenL( fileSession, fileName );
+    resourcefile.ConfirmSignatureL( 0 );
+    HBufC8* readBuffer = resourcefile.AllocReadLC( aResourceID );
+    
+    const TPtrC16 ptrReadBuffer( (TText16*) readBuffer->Ptr(),( readBuffer->Length() + 1 ) >> 1 ); 
+    HBufC16* textBuffer=HBufC16::NewLC( ptrReadBuffer.Length() );
+    *textBuffer = ptrReadBuffer;
+    aBuf.Copy( *textBuffer );
+
+    CleanupStack::PopAndDestroy( 4 ); // textBuffer, fileSession, resourcefile, readBuffer
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ReadResourceL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::OperationNotSupported
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::OperationNotSupported()
+    {
+    return R_EIK_TBUF_NOT_AVAILABLE;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ContextIcon
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::ContextIcon( const TMsvEntry& aContext, TContextMedia aMedia )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ContextIcon()"));
+
+    TInt icon = 0;
+    if( aMedia == EBluetooth )
+        {
+        if( aContext.Unread() )
+            {
+            icon = EMbmMuiuQgn_prop_mce_bt_unread - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        else
+            {
+            icon = EMbmMuiuQgn_prop_mce_bt_read - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        }
+    else if( aMedia == EInfrared )
+        {
+        if( aContext.Unread() )
+            {
+            icon = 0;
+            }
+        else
+            {
+            icon = EMbmMuiuQgn_prop_mce_ir_read - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        }
+    else if( aMedia == ENfc )
+        {
+        if( aContext.Unread() )
+            {
+            icon = KNfcUnreadIconIndex;
+            }
+        else
+            {
+            icon = KNfcReadIconIndex;
+            }
+        }
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ContextIcon() completed"));
+
+    return icon;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::UpdateBitmaps
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::UpdateBitmaps( TUid aMedia, 
+    TInt& aNumberOfZoomStates, TFileName& aBitmapFile, TInt& aStartBitmap, 
+    TInt& aEndBitmap )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::UpdateBitmaps()"));
+
+    aBitmapFile = KCommonUiBitmapFile;
+    aNumberOfZoomStates = KUiNumberOfZoomStates;
+    if( aMedia == KUidMsgTypeBt )
+        {
+        aStartBitmap = EMbmMuiuQgn_prop_mce_ir_unread;
+        aEndBitmap = EMbmMuiuQgn_prop_mce_bt_read_mask;
+        }
+    else
+        {
+        aStartBitmap = EMbmMuiuQgn_prop_mce_ir_unread;
+        aEndBitmap = EMbmMuiuQgn_prop_mce_bt_unread_mask;
+        }
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::UpdateBitmaps() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::DeleteCBitMapArray
+// -----------------------------------------------------------------------------
+//
+inline void DeleteCBitMapArray(TAny* aPtr)
+    {
+    if (aPtr) 
+        {
+        TObexUtilsUiLayer::CBitmapArray* array =
+            reinterpret_cast<TObexUtilsUiLayer::CBitmapArray*>(aPtr);    
+        array->ResetAndDestroy();
+        delete array;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::CreateAndAppendBitmapL
+// -----------------------------------------------------------------------------
+//
+void CreateAndAppendBitmapL(const TAknsItemID&          aID,
+                            const TInt                  aFileBitmapId,
+                            CArrayPtr<TObexUtilsUiLayer::CBitmapArray>* aIconArrays     )
+    {
+    TFileName muiubmpFilename;
+    muiubmpFilename += KObexUtilsFileDrive;
+    muiubmpFilename += KDC_APP_BITMAP_DIR;
+    muiubmpFilename += KCommonUiBitmapFile;
+
+    TObexUtilsUiLayer::CBitmapArray* array=NULL;
+    array=new(ELeave) CArrayPtrFlat<CFbsBitmap>(KUiNumberOfZoomStates);
+    CleanupStack::PushL(TCleanupItem(DeleteCBitMapArray, array));
+
+    CFbsBitmap* bitmap=0, *mask=0;
+    
+    //Can not use CreateIconLC since the order in which bitmap and mask are pushed into Cleanup Stack is undefined.
+    AknsUtils::CreateIconL(
+        AknsUtils::SkinInstance(),
+        aID,
+        bitmap,
+        mask,
+        muiubmpFilename,
+        aFileBitmapId,
+        aFileBitmapId+1);
+    CleanupStack::PushL(mask);
+    CleanupStack::PushL(bitmap);
+
+    // warning: bmp is deleted by the array CleanupItem. Immediately Pop or risk double deletion upon a Leave.
+    array->AppendL(bitmap);
+    CleanupStack::Pop(bitmap);
+
+    // warning: bmp is deleted by the array CleanupItem. Immediately Pop or risk double deletion upon a Leave.
+    array->AppendL(mask);
+    CleanupStack::Pop(mask);
+
+    aIconArrays->AppendL(array);
+    CleanupStack::Pop(array);
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::CreateIconsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::CreateIconsL(
+    TUid aMedia,
+    CArrayPtr<TObexUtilsUiLayer::CBitmapArray>* aIconArrays )
+    {
+    if( aMedia == KUidMsgTypeBt ) //Bluetooth 
+        {
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrUnread,
+            EMbmMuiuQgn_prop_mce_ir_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrRead,
+            EMbmMuiuQgn_prop_mce_ir_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtUnread,
+            EMbmMuiuQgn_prop_mce_bt_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtRead,
+            EMbmMuiuQgn_prop_mce_bt_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcRead,
+            0,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcUnread,
+            0,
+            aIconArrays);        
+        }
+    else //Infrared
+        {
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrUnread,
+            EMbmMuiuQgn_prop_mce_ir_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrRead,
+            EMbmMuiuQgn_prop_mce_ir_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtUnread,
+            EMbmMuiuQgn_prop_mce_bt_unread,
+            aIconArrays);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::IsBackupRunning
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::IsBackupRunning()
+    {
+    const TUint32 KFileManagerBkupStatus = 0x00000001;
+    
+    TInt status = EFileManagerBkupStatusUnset;
+    TBool retValue = EFalse;
+    TInt err = RProperty::Get( TUid::Uid(KFileManagerUID3), KFileManagerBkupStatus,
+                              status );
+    if ( err == KErrNone )
+        {
+        if ( status == EFileManagerBkupStatusBackup || 
+             status == EFileManagerBkupStatusRestore )
+            {
+            TSecureId fileManagerSecureId( KFileManagerUID3 );
+            //only returning ETrue if backup process is still active
+            retValue = ProcessExists( fileManagerSecureId );
+            }
+        }
+   
+    return retValue;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::PrepareDialogExecuteL
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsUiLayer::PrepareDialogExecuteL( const TInt& aResourceID, CEikDialog* aDialog )
+    {
+    if (IsCoverDisplayL())
+        {
+        TInt dialogIndex =
+            ((aResourceID & KResourceNumberMask) - KFirstResourceOffset) + KEnumStart;
+        aDialog->PublishDialogL( dialogIndex, KObexUtilsCategory );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::IsCoverDisplayL()
+// -----------------------------------------------------------------------------
+//
+TBool TObexUtilsUiLayer::IsCoverDisplayL()
+    {
+    TBool coverDisplay = EFalse;
+	FeatureManager::InitializeLibL();
+	if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
+		{
+		coverDisplay = ETrue;
+		}
+	FeatureManager::UnInitializeLib();
+    return coverDisplay;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ProcessExists
+// -----------------------------------------------------------------------------
+//
+TBool TObexUtilsUiLayer::ProcessExists( const TSecureId& aSecureId )
+    {
+    _LIT( KFindPattern, "*" );
+    TFindProcess finder(KFindPattern);
+    TFullName processName;
+    while( finder.Next( processName ) == KErrNone )
+        {
+        RProcess process;
+        if ( process.Open( processName ) == KErrNone )
+            {
+            TSecureId processId( process.SecureId() );
+            process.Close();
+            if( processId == aSecureId )
+                {
+                return ETrue;
+                }
+            }
+        }
+    return EFalse;
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/updatemusiccollection.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  update the music library after the musics are recieved using direct file saving
+*
+*/
+
+
+
+//#include <mpxcollectionhelper.h>
+#include <mpxcollectionhelperfactory.h>
+
+#include "updatemusiccollection.h"
+#include "obexutilsdebug.h"
+
+//#include <mpxplaybackutility.h>
+#include <mpxmessagegeneraldefs.h>
+
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::CUpdateMusicCollection
+// Default constructor
+// -----------------------------------------------------------------------------
+CUpdateMusicCollection::CUpdateMusicCollection() 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::NewL
+// -----------------------------------------------------------------------------
+
+CUpdateMusicCollection* CUpdateMusicCollection::NewL()
+    {
+    CUpdateMusicCollection* self = new( ELeave ) CUpdateMusicCollection();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::ConstructL
+// Symbian OS default constructor can leave.
+// -----------------------------------------------------------------------------
+ 
+void CUpdateMusicCollection::ConstructL()
+    {
+    iCollectionHelper = 
+        CMPXCollectionHelperFactory::NewCollectionHelperL();
+    iPlaybackUtility = MMPXPlaybackUtility::NewL( KPbModeDefault, this );
+
+    }
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::addToCollectionL
+// add the music to music library
+// -----------------------------------------------------------------------------
+ 
+void CUpdateMusicCollection::addToCollectionL(const TDesC& aFileName)
+    {
+    iCollectionHelper->AddL(aFileName,this);
+    }
+
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::isSupported
+// checks if the file is supported by music library
+// -----------------------------------------------------------------------------
+ TInt CUpdateMusicCollection::isSupported (const TDesC16& aPtr)
+    {
+    CDesCArray* SupportedMimeTypes =
+            iPlaybackUtility->SupportedMimeTypes();
+    TInt pos = 0;
+    return  SupportedMimeTypes->Find(aPtr,pos);
+    }
+ 
+ // -----------------------------------------------------------------------------
+ // CUpdateMusicCollection::HandleAddFileCompleteL
+ // callbackCalled back after a call to CCollectionHelper::AddL() to provide status
+ // -----------------------------------------------------------------------------
+  void CUpdateMusicCollection::HandleAddFileCompleteL( TInt aErr )
+    {    
+    if(aErr == KErrNone)
+        {
+        FLOG(_L("[CUpdateMusicCollection]\t HandleAddFileCompleteL successful"));    
+        }
+    else
+        {
+         FLOG(_L("[CUpdateMusicCollection]\t HandleAddFileCompleteL unsuccessful"));    
+        }
+  
+    }
+ // -----------------------------------------------------------------------------
+ // CUpdateMusicCollection::HandlePlaybackMessage
+ // -----------------------------------------------------------------------------
+   
+void CUpdateMusicCollection::HandlePlaybackMessage( CMPXMessage* aMessage,TInt aError )
+   {
+     if ( aError == KErrNone && aMessage )
+         {
+         FLOG(_L("[CUpdateMusicCollection]\t HandleAddFileCompleteL unsuccessful"));
+        }
+     }
+
+// -----------------------------------------------------------------------------
+// CUpdateMusicCollection::~CUpdateMusicCollection
+// default destructor
+// -----------------------------------------------------------------------------
+   
+CUpdateMusicCollection::~CUpdateMusicCollection()
+    {
+    if ( iCollectionHelper )
+        {
+            iCollectionHelper->Close();
+        }    
+    if (iPlaybackUtility)
+        {
+        iPlaybackUtility->Close();
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btobexprofiles/obexserviceman/utils/src/vMessageHandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,628 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include "vMessageHandler.h"
+#include "obexutilsuilayer.h"
+#include "obexutilsdebug.h"
+#include "etelmm.h"
+#include <BTSapDomainPSKeys.h>
+#include <app/smut.h> // KUidMsgTypeSMS
+#ifdef NO101APPDEPFIXES_NEW
+#include <app/smuthdr.h>
+#endif //NO101APPDEPFIXES_NEW
+
+#include <gsmupdu.h>
+#include <txtrich.h>
+#include <msvuids.h>
+
+#include <app/csmsaccount.h>
+
+#ifdef NO101APPDEPFIXES_NEW
+// SMUT Unbranch
+#include <app/csmsgetdetdescinterface.h>
+#endif //NO101APPDEPFIXES_NEW
+
+// ================= MEMBER FUNCTIONS =======================
+TBool CSapVMessageParser::HandleMessageL(CObexBufObject*  aReceivedObject, const TUid aMtmID,
+                                        RFile& aFile, CMsvSession* aMsvSession, TTime aTime)
+{
+    FLOG( _L( " CSapVMessageParser: HandleMessageL\t" ) );
+
+    CSapVMessageParser* parser = CSapVMessageParser::NewLC();
+    TBool isVmsg=parser->ParseMessageL(aReceivedObject, aMtmID, aFile, aTime);
+    if(isVmsg)
+    {
+        parser->SaveSapMessageL(aMsvSession);
+    }
+    CleanupStack::PopAndDestroy(parser);
+
+    FLOG( _L( " CSapVMessageParser: HandleMessageL: Done\t" ) );
+    
+    return isVmsg;
+}
+
+CSapVMessageParser* CSapVMessageParser::NewLC()
+{
+    CSapVMessageParser* self = new (ELeave) CSapVMessageParser();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+}
+
+void CSapVMessageParser::ConstructL()
+{
+}
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CSapVMessageParser::CSapVMessageParser()
+{
+}
+
+// ---------------------------------------------------------
+// ParseMessageL
+// Recognises and parses SAP VMessage.
+// ---------------------------------------------------------
+//
+TBool CSapVMessageParser::ParseMessageL(CObexBufObject*  aReceivedObject, const TUid aMtmID,
+                                        RFile& aFile, TTime aTime)
+{
+    FLOG( _L( " CSapVMessageParser: ParseMessageL\t" ) );
+
+    static const TInt KExpandSize = 16;
+
+    iType=ESapVMessageUnknown;
+
+    if( aMtmID != KUidMsgTypeBt ||
+        !CheckMime(aReceivedObject->Type()) ||
+        !CheckName(aReceivedObject->Name()) ||
+        !IsSapConnectionActive())
+    {
+        FLOG( _L( " CSapVMessageParser: ParseMessageL: Unknown\t" ) );
+        return EFalse;
+    }
+
+    CBufFlat* buffer = CBufFlat::NewL( KExpandSize );
+    CleanupStack::PushL(buffer);            // 1st push
+
+    TInt fileLength;
+    User::LeaveIfError( aFile.Size( fileLength ) );
+
+    // Read the file into buffer
+    buffer->ResizeL( fileLength );
+    TPtr8 temp = buffer->Ptr(0);
+    TInt pos = 0;
+    aFile.Seek(ESeekStart, pos);
+    User::LeaveIfError( aFile.Read( temp ) );
+    
+    pos=0;
+    aFile.Seek(ESeekStart, pos); // rewind file
+
+    SimpleParseL(temp);
+
+    CleanupStack::PopAndDestroy(buffer); // -1 pop
+    
+    iTimeReceived=aTime;
+    if(aReceivedObject->Time()==TTime(0))
+    {
+        iTimeOriginal = aTime;
+    }
+    else
+    {
+        iTimeOriginal = aReceivedObject->Time();
+    }
+
+    return (iType!=ESapVMessageUnknown);
+}
+
+// ---------------------------------------------------------
+// IsSapConnectionActive
+// Recognises active SAP connection.
+// ---------------------------------------------------------
+//
+TBool CSapVMessageParser::IsSapConnectionActive()
+{
+    FLOG( _L( " CSapVMessageParser: IsSapConnectionActive\t" ) );
+
+    TInt state=EBTSapNotConnected;
+    RProperty::Get(KPSUidBluetoothSapConnectionState, KBTSapConnectionState, state);
+    return state==EBTSapConnected;
+}
+
+
+// ---------------------------------------------------------
+// CheckMime
+// Check MIME type of vMessage.
+// ---------------------------------------------------------
+//
+TBool CSapVMessageParser::CheckMime(const TDesC8& aType)
+{
+    FLOG( _L( " CSapVMessageParser: CheckMime\t" ) );
+
+    _LIT8(KMimeVmsg,"text/x-vmsg\x00");
+
+    return (aType.Compare(KMimeVmsg)==0);
+}
+
+
+// ---------------------------------------------------------
+// CheckName
+// Check object name of SAP vMessage.
+// ---------------------------------------------------------
+//
+TBool CSapVMessageParser::CheckName(const TDesC& aName)
+{
+    FLOG( _L( " CSapVMessageParser: CheckName\t" ) );
+
+    _LIT(KNameVmsg, "sap_sms.vmg");
+
+    return (aName.Compare(KNameVmsg)==0);
+}
+
+// ---------------------------------------------------------
+// Address
+// Returns address field of parsed message.
+// ---------------------------------------------------------
+//
+const TDesC& CSapVMessageParser::Address() const
+{
+    if(iType==ESapVMessageTextSMS && iAddress)
+    {
+        return *iAddress;
+    }
+    else
+    {
+        return KNullDesC;
+    }
+}
+
+// ---------------------------------------------------------
+// Message
+// Returns body text of parsed message.
+// ---------------------------------------------------------
+//
+const TDesC& CSapVMessageParser::Message() const
+{
+    if(iType==ESapVMessageTextSMS && iMessage)
+    {
+        return *iMessage;
+    }
+    else
+    {
+        return KNullDesC;
+    }
+}
+
+// ---------------------------------------------------------
+// ~CSapVMessageParser
+// Destructor.
+// ---------------------------------------------------------
+//
+CSapVMessageParser::~CSapVMessageParser()
+{
+    FLOG( _L( " CSapVMessageParser: ~CSapVMessageParser\t" ) );
+
+    delete iAddress;
+    delete iMessage;
+}
+
+static TBool Compare(const TDesC8& aData, TInt& aReadBytes, const TDesC8& aToken)
+{
+    if( (aData.Length() >= aReadBytes + aToken.Length()) &&
+        (aData.Mid(aReadBytes, aToken.Length()).Compare(aToken)==0) )
+    {
+        aReadBytes+=aToken.Length();
+        return ETrue;
+    }
+    else
+    {
+        return EFalse;
+    }
+}
+
+// ---------------------------------------------------------
+// SimpleParseL
+// Parses SAP VMessage.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SimpleParseL(const TDesC8& aData)
+{
+    FLOG( _L( " CSapVMessageParser: SimpleParseL\t" ) );
+
+    // SAP VMessage format definitions
+    _LIT8(KVmsgStatus,  "BEGIN:VMSG\x0d\x0a"
+                        "VERSION:1.1\x0d\x0a"
+                        "X-IRMC-STATUS:");
+    _LIT8(KVmsgBox,     "\x0d\x0a"
+                        "X-IRMC-TYPE:SMS\x0d\x0a"
+                        "X-IRMC-BOX:");
+    _LIT8(KVmsgVCard,   "BEGIN:VCARD\x0d\x0a"
+                        "VERSION:2.1\x0d\x0a");
+    _LIT8(KVmsgName1,   "N:");
+    _LIT8(KVmsgName2,   "N;ENCODING=8BIT;CHARSET=UTF-8:");
+    _LIT8(KVmsgTel,     "\x0d\x0a"
+                        "TEL:");
+    _LIT8(KVmsgVCardEnd,"\x0d\x0a"
+                        "END:VCARD\x0d\x0a");
+    _LIT8(KVmsgVEnv,    "BEGIN:VENV\x0d\x0a");
+    _LIT8(KVmsgVBody,   "BEGIN:VBODY\x0d\x0a"
+                        "X-SMS;TYPE=TEXT;ENCODING=8BIT;CHARSET=UTF-8:");
+    _LIT8(KVmsgEnd,     "\x0d\x0a"
+                        "END:VBODY\x0d\x0a"
+                        "END:VENV\x0d\x0a"
+                        "END:VMSG\x0d\x0a");
+    _LIT8(KVmsgUnread,  "UNREAD");
+    _LIT8(KVmsgRead,    "READ");
+    _LIT8(KVmsgInbox,   "INBOX\x0d\x0a");
+    _LIT8(KVmsgSentbox, "SENTBOX\x0d\x0a");
+    _LIT8(KCrLf,        "\x0d\x0a");
+
+    // Simple SAP VMessage parsing
+    TInt readBytes=0;
+    if( Compare(aData, readBytes, KVmsgStatus) &&
+        aData.Right(KVmsgEnd().Length()).Compare(KVmsgEnd)==0 )
+    {   // The begin and end of the message are correct
+        if(Compare(aData, readBytes, KVmsgUnread))
+        {   // Status: Unread
+            iStatus=ESapVMessageStatusUnread;
+        }
+        else if(Compare(aData, readBytes, KVmsgRead))
+        {   // Status: Read or Sent
+            iStatus=ESapVMessageStatusRead;
+        }
+        else
+        {   // Unknown status
+            return;
+        }
+        if( Compare(aData, readBytes, KVmsgBox) )
+        {
+            if(iStatus==ESapVMessageStatusRead && Compare(aData, readBytes, KVmsgSentbox))
+            {   // Status: Sent
+                iStatus=ESapVMessageStatusSent;
+                if(!Compare(aData, readBytes, KVmsgVEnv))
+                {
+                    return;
+                }
+            }
+            else if(! Compare(aData, readBytes, KVmsgInbox) )
+            {
+                return;
+            }
+            if( Compare(aData, readBytes, KVmsgVCard) &&
+                ( Compare(aData, readBytes, KVmsgName1) ||
+                    Compare(aData, readBytes, KVmsgName2) ) )
+            {   // The begin of the message is correct
+                TInt beginOfName=readBytes;
+                TInt endOfName=aData.Find(KVmsgTel);
+                TInt endOfFrom=aData.Find(KVmsgVCardEnd);
+                readBytes=endOfFrom+KVmsgVCardEnd().Length();
+                if(iStatus!=ESapVMessageStatusSent)
+                {
+                    if(!Compare(aData, readBytes, KVmsgVEnv))
+                    {
+                        return;
+                    }
+                }
+                if(endOfFrom!=KErrNotFound && endOfName!=KErrNotFound &&
+                    endOfName<endOfFrom && Compare(aData, readBytes, KVmsgVBody))
+                {   // The middle part of the message is correct
+                    TInt beginOfFrom=endOfName+KVmsgTel().Length();
+                    TInt fromLength=endOfFrom-beginOfFrom;
+                    if(fromLength <= RMobilePhone::KMaxMobileTelNumberSize)
+                    {   // The sender field of the message is not too long
+                        TInt beginOfBody=readBytes;
+                        TInt bodyLength=(aData.Length()-KVmsgEnd().Length())-beginOfBody;
+
+                        TPtrC8 name = aData.Mid(beginOfName, endOfName-beginOfName);
+                        TPtrC8 from = aData.Mid(beginOfFrom, fromLength);
+                        if((name.Find(KCrLf)==KErrNotFound) && (from.Find(KCrLf)==KErrNotFound))
+                        {   // Message is correct
+                            if(from.Length()==0 && name.Length()>0 &&
+                                name.Length() <= RMobilePhone::KMaxMobileTelNumberSize)
+                            {
+                                iAddress = CnvUtfConverter::ConvertToUnicodeFromUtf8L(name);
+                            }
+                            else
+                            {
+                                iAddress = HBufC::NewL(from.Length());
+                                iAddress->Des().Copy(from);
+                            }
+
+                            TPtrC8 body = aData.Mid(beginOfBody, bodyLength);
+                            iMessage = CnvUtfConverter::ConvertToUnicodeFromUtf8L(body);
+
+                            FLOG( _L( " CSapVMessageParser: SimpleParseL: SMS\t" ) );
+                            iType=ESapVMessageTextSMS;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+// ---------------------------------------------------------
+// SaveSapMessageL
+// Saves parsed VMessage.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SaveSapMessageL(CMsvSession* aMsvSession)
+{
+    FLOG( _L( " CSapVMessageParser: SaveSapMessageL\t" ) );
+
+    switch(iType)
+    {
+        case ESapVMessageTextSMS:
+            SaveSapSmsL(aMsvSession);
+            break;
+
+        case ESapVMessageMMSNotificationInd:
+            SaveSapMmsL(aMsvSession);
+            break;
+
+        default: // Discard message
+            break;
+    }
+}
+
+// ---------------------------------------------------------
+// SaveSapSmsL
+// Saves parsed VMessage as SMS.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SaveSapSmsL(CMsvSession* aMsvSession)
+{
+    FLOG( _L( " CSapVMessageParser: SaveSapSmsL\t" ) );
+
+    CParaFormatLayer* richParaFormatLayer = CParaFormatLayer::NewL();
+    CleanupStack::PushL(richParaFormatLayer); // 1st push
+    CCharFormatLayer* richCharFormatLayer = CCharFormatLayer::NewL(); 
+    CleanupStack::PushL(richCharFormatLayer); // 2nd push
+    CRichText* 
+        richText = CRichText::NewL(richParaFormatLayer,richCharFormatLayer);
+    CleanupStack::PushL(richText); // 3rd push
+
+    richText->InsertL(0, Message());
+
+    if(iStatus==ESapVMessageStatusSent)
+    {
+        SaveSmsToSentL(aMsvSession, richText);
+    }
+    else
+    {
+        SaveSmsToInboxL(aMsvSession, richText);
+    }
+
+    CleanupStack::PopAndDestroy(3, richParaFormatLayer);
+
+    FLOG( _L( " CSapVMessageParser: SaveSapSmsL: Done\t" ) );
+}
+
+// ---------------------------------------------------------
+// SaveSapMmsL
+// Saves parsed VMessage as MMS notification.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SaveSapMmsL(CMsvSession* /*aMsvSession*/) const
+{
+    // This is not supported
+}
+
+// ---------------------------------------------------------
+// SaveSmsToInboxL
+// Saves parsed VMessage to Inbox as SMS.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SaveSmsToInboxL(CMsvSession* aMsvSession, CRichText* aMessage)
+{
+    #ifndef NO101APPDEPFIXES_NEW
+    (void) aMsvSession; 
+    (void) aMessage; 
+    #endif //NO101APPDEPFIXES_NEW
+    #ifdef NO101APPDEPFIXES_NEW
+    FLOG( _L( " CSapVMessageParser: SaveSmsToInboxL\t" ) ); 
+    CSmsHeader* header=CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *aMessage );
+    CleanupStack::PushL(header); // 1st push
+    header->SetFromAddressL(Address());
+    header->SetReplyPathProvided(EFalse);
+
+    TMsvEntry newTEntry;
+
+    newTEntry.iType = KUidMsvMessageEntry;
+    newTEntry.iMtm = KUidMsgTypeSMS;  
+    newTEntry.SetComplete(EFalse);
+    newTEntry.SetFailed(EFalse);
+    newTEntry.SetOperation(EFalse);
+    newTEntry.SetMultipleRecipients(EFalse);
+    newTEntry.SetVisible(EFalse);  // Make invisible
+    // and in preparation to make sure gets cleaned up on errors.
+    newTEntry.SetInPreparation(ETrue);
+    newTEntry.SetSendingState(KMsvSendStateNotApplicable);
+    newTEntry.iServiceId = KMsvLocalServiceIndexEntryId;
+    newTEntry.iSize = 0;        
+    newTEntry.iDate = iTimeReceived;
+    header->Message().SetTime(iTimeOriginal);
+    ((CSmsDeliver*)&header->Message().SmsPDU())->SetServiceCenterTimeStamp(iTimeOriginal);
+
+// SMUT Unbranch
+    CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+    CleanupStack::PushL( smsPlugin );
+
+    TBuf<KSmsDescriptionLength> description;
+    smsPlugin->GetDescription( header->Message(), description );
+    newTEntry.iDescription.Set(description);
+    TBuf<KSmsDetailsLength> details;
+    smsPlugin->GetDetails( aMsvSession->FileSession(), header->Message(), details );
+    newTEntry.iDetails.Set(details);
+
+    CleanupStack::PopAndDestroy( smsPlugin );
+
+    // Create new entry to inbox
+    CMsvEntry* inbox = aMsvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+    CleanupStack::PushL( inbox );
+    inbox->CreateL(newTEntry);
+    CleanupStack::PopAndDestroy(inbox);
+
+    TMsvId newEntryId=newTEntry.Id();
+    aMsvSession->CleanupEntryPushL(newEntryId); //2nd push
+
+    // Get the created entry
+    CMsvEntry* newEntry = aMsvSession->GetEntryL(newEntryId);
+    CleanupStack::PushL(newEntry);  // 3rd push
+
+    // Store SMS message to the entry
+    CMsvStore* newMessageStore = newEntry->EditStoreL();
+    CleanupStack::PushL(newMessageStore);   // 4th push
+    header->StoreL(*newMessageStore);
+    newMessageStore->StoreBodyTextL(*aMessage);
+    newMessageStore->CommitL();
+
+    // Save the size & make visible
+    newTEntry = newEntry->Entry();
+    newTEntry.iSize = newMessageStore->SizeL();
+                    
+    // Saved OK. Make the entry visible and flag it as complete.
+    newTEntry.SetVisible(ETrue);
+    newTEntry.SetInPreparation(EFalse);   
+    newTEntry.SetUnread(iStatus==ESapVMessageStatusUnread);
+    newTEntry.SetNew(iStatus==ESapVMessageStatusRead);
+    newTEntry.SetComplete(ETrue);
+    newTEntry.SetReadOnly(ETrue);
+    newEntry->ChangeL(newTEntry);
+
+    CleanupStack::PopAndDestroy(2, newEntry);
+    aMsvSession->CleanupEntryPop();             
+    CleanupStack::PopAndDestroy(header);
+
+    FLOG( _L( " CSapVMessageParser: SaveSmsToInboxL: Done\t" ) );
+    #endif  //NO101APPDEPFIXES_NEW
+}
+
+// ---------------------------------------------------------
+// SaveSmsToSentL
+// Saves parsed VMessage to Sent folder as SMS.
+// ---------------------------------------------------------
+//
+void CSapVMessageParser::SaveSmsToSentL(CMsvSession* aMsvSession, CRichText* aMessage)
+{
+    #ifndef NO101APPDEPFIXES_NEW
+    (void) aMsvSession; 
+    (void) aMessage; 
+    #endif //NO101APPDEPFIXES_NEW
+    
+    #ifdef NO101APPDEPFIXES_NEW
+    FLOG( _L( " CSapVMessageParser: SaveSmsToSentL\t" ) );
+
+    CSmsHeader* header = CSmsHeader::NewL( CSmsPDU::ESmsSubmit, *aMessage );
+    CleanupStack::PushL( header );
+    header->SetFromAddressL(Address());
+
+    TMsvEntry newTEntry;
+    newTEntry.iType = KUidMsvMessageEntry;
+    newTEntry.iMtm = KUidMsgTypeSMS;  
+    newTEntry.SetComplete(EFalse);
+    newTEntry.SetFailed(EFalse);
+    newTEntry.SetOperation(EFalse);
+    newTEntry.SetMultipleRecipients(EFalse);
+    newTEntry.SetVisible(EFalse);  // Make invisible
+    // and in preparation to make sure gets cleaned up on errors.
+    newTEntry.SetInPreparation(ETrue);
+    newTEntry.SetSendingState(KMsvSendStateSent);
+    newTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;
+    newTEntry.iSize = 0;        
+    newTEntry.iDate=iTimeReceived;
+    header->Message().SetTime(iTimeOriginal);
+
+// SMUT Unbranch
+    CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+    CleanupStack::PushL( smsPlugin );
+    
+    TBuf<KSmsDescriptionLength> description;
+    smsPlugin->GetDescription( header->Message(), description );
+    newTEntry.iDescription.Set(description);
+    TBuf<KSmsDetailsLength> details;
+    smsPlugin->GetDetails( aMsvSession->FileSession(), header->Message(), details );
+    newTEntry.iDetails.Set(details);
+
+    CleanupStack::PopAndDestroy( smsPlugin );
+
+    CSmsSettings* settings = CSmsSettings::NewLC();
+    CSmsAccount* account = CSmsAccount::NewLC();
+    account->LoadSettingsL(*settings);
+    CleanupStack::PopAndDestroy(account);
+    header->SetSmsSettingsL( *settings );
+    TInt scindex = settings->DefaultServiceCenter();
+    if ( scindex != KErrNotFound )
+    {
+       header->SetServiceCenterAddressL( ( settings->GetServiceCenter( scindex ) ).Address() );
+    }
+    CleanupStack::PopAndDestroy(settings);
+
+    CSmsNumber* rcpt = CSmsNumber::NewL();
+    CleanupStack::PushL( rcpt );
+    rcpt->SetAddressL(Address());
+    if(Address()!=details)
+    {
+        rcpt->SetNameL(details);
+    }
+    header->Recipients().ResetAndDestroy();
+    header->Recipients().AppendL( rcpt );
+    CleanupStack::Pop( rcpt );
+
+    // Create new entry to Sent folder
+    CMsvEntry* sentFldr = aMsvSession->GetEntryL( KMsvSentEntryId );
+    CleanupStack::PushL( sentFldr );
+    sentFldr->CreateL(newTEntry);
+    CleanupStack::PopAndDestroy(sentFldr);
+
+    TMsvId newEntryId=newTEntry.Id();
+    aMsvSession->CleanupEntryPushL(newEntryId); //2nd push
+
+    // Get the created entry
+    CMsvEntry* newEntry = aMsvSession->GetEntryL(newEntryId);
+    CleanupStack::PushL(newEntry);  // 3rd push
+
+    // Store SMS message to the entry
+    CMsvStore* newMessageStore = newEntry->EditStoreL();
+    CleanupStack::PushL(newMessageStore);   // 4th push
+    header->StoreL(*newMessageStore);
+    newMessageStore->StoreBodyTextL(*aMessage);
+    newMessageStore->CommitL();
+
+    // Save the size & make visible
+    newTEntry = newEntry->Entry();
+    newTEntry.iSize = newMessageStore->SizeL();
+                    
+    // Saved OK. Make the entry visible and flag it as complete.
+    newTEntry.SetVisible(ETrue);
+    newTEntry.SetInPreparation(EFalse);   
+    newTEntry.SetComplete(ETrue);
+    newEntry->ChangeL(newTEntry);
+
+    CleanupStack::PopAndDestroy(2, newEntry);
+    aMsvSession->CleanupEntryPop();             
+    CleanupStack::PopAndDestroy(header);
+
+    FLOG( _L( " CSapVMessageParser: SaveSmsToSentL: Done\t" ) );
+    #endif  //NO101APPDEPFIXES_NEW
+}
+
+//  End of File
--- a/btservices_plat/group/bld.inf	Mon May 17 11:06:23 2010 +0300
+++ b/btservices_plat/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -31,3 +31,7 @@
 #include "../bluetooth_notifier_internal_api/group/bld.inf"
 #include "../bluetooth_sap_connection_state_api/group/bld.inf"
 #include "../bluetooth_secondary_display_notification_api/group/bld.inf"
+#include "../obex_secondary_display_notification_api/group/bld.inf"
+#include "../obex_service_plugin_api/group/bld.inf"
+#include "../obex_service_utils_api/group/bld.inf"
+#include "../usb_obexservicemanager_client_api/group/bld.inf"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_secondary_display_notification_api/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  File that exports the files belonging to 
+:                OBEX Secondary Display Notification API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/secondarydisplay/obexutilssecondarydisplayapi.h     MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/obexutilssecondarydisplayapi.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_secondary_display_notification_api/inc/secondarydisplay/obexutilssecondarydisplayapi.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005 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:  Contains dialog index for cover UI.
+*
+*/
+
+
+#ifndef OBEXUTILS_SECONDARY_DISPLAY_API_H
+#define OBEXUTILS_SECONDARY_DISPLAY_API_H
+
+//  INCLUDES
+#include  <e32std.h>
+
+// Category
+const TUid KObexUtilsCategory = { 0x101F86AF };
+
+/**
+* Enumerates types.
+*/
+enum TSecondaryDisplayObexUtilsDialogs
+    {
+    ECmdNone,
+    ECmdIrConnecting,
+    ECmdIrCannotEstablish,
+    ECmdIrSendingData,
+    ECmdIrSendingFailed,
+    ECmdIrDataSent,
+    ECmdBtConnecting,
+    ECmdBtSendingData,
+    ECmdBtDevNotAvail,
+    ECmdBtFailedToSend,
+    ECmdBtDataSent,
+    ECmdBtNotReceiveOne,
+    ECmdOutOfMemory,
+    ECmdBtSentImageNumber,
+    ECmdBtNotReceiveAny,
+    ECmdBtNotSendAll,
+    ECmdBtNotAllSupported,
+    ECmdBtNotAllSupportedMixed,
+    ECmdBtConnectingWait,
+    ECmdIrConnectingWait,
+    ECmdBtPrintingWait,
+    ECmdSendingProgress
+    };
+    
+#endif      // OBEXUTILS_SECONDARY_DISPLAY_API_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_secondary_display_notification_api/obex_secondary_display_notification_api.metaxml	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<api id="07f3659fded6553e4ea563935c12001e" dataversion="2.0">
+  <name>OBEX Secondary Display Notification API</name>
+  <description>defines message IDs for showing message on secondary display</description>
+  <type>c++</type>
+  <collection>localconnectivityservice</collection>
+  <libs>
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_plugin_api/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  File that exports the files belonging to 
+:                OBEX Service Plugin API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/SrcsInterface.inl     MW_LAYER_PLATFORM_EXPORT_PATH(SrcsInterface.inl)
+../inc/SrcsInterface.h     MW_LAYER_PLATFORM_EXPORT_PATH(SrcsInterface.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_plugin_api/inc/SrcsInterface.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-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:  Define obexserviceman's service controller ECom interface.
+*
+*/
+
+
+
+#ifndef _SRCSINTERFACE_
+#define _SRCSINTERFACE_
+
+
+//INCLUDES
+#include <e32base.h>
+#include <ecom/ecom.h>
+#include <badesca.h>
+
+// CONSTANTS
+const TUid KCSrcsInterfaceUid = {0x101F7C8C}; // UID of this interface
+
+
+enum TSrcsMediaType //transport media types
+    {
+        ESrcsMediaBT = 1,
+        ESrcsMediaIrDA,
+        ESrcsMediaUSB
+    };
+
+/**
+*   An abstract class being representative of the
+*   concrete class which the client wishes to use.
+*
+*   It acts as a base, for a real class to provide all the
+*   functionality that a client requires.
+*   It supplies instantiation & destruction by using
+*   the ECom framework, and functional services
+*   by using the methods of the actual class.
+*/
+class CSrcsInterface : public CBase
+    {
+public:
+
+    /**
+    * Two-phased constructor.
+    * @param aImplUid Implementation UId.
+    * @return newly created CSrcsInterface.
+    */
+    static CSrcsInterface* NewL(TUid aImplUid);
+
+    /**
+    * Destructor
+    */
+    virtual ~CSrcsInterface();
+
+    /** 
+	* Request a list of all available implementations which satisfies this given interface.
+    * @param aImplInfoArray Implementation instance array.
+    * @return none.
+	*/
+    static void ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray);
+
+    /** 
+	* Request a list of matching implementations which satisfies this given interface.
+    * @param aMatchString	String to be matched by the implemention.
+    * @param aImplInfoArray Implementation instance array.
+    * @return none.
+	*/
+    static void ListImplementationsL(const TDesC8& aMatchString, RImplInfoPtrArray& aImplInfoArray);
+    
+
+	/** 
+	* Check if OBEX service is still active.
+    * @return ETrue: OBEX service is still active.
+	*		  EFalse: OBEX service is inactive.
+	*/
+	virtual TBool IsOBEXActive() = 0;
+
+	/** 
+	* Provide transport media information to service controller.
+	* @param aMediaType	enum value specifying transport media type.
+	* @return none.
+	*/
+	virtual void SetMediaType( TSrcsMediaType aMediaType ) ;
+
+	/** 
+	* SetObexServer
+	* @param aObexServer pass obex server pointer to sevice controller
+	* @return none.
+	*/
+	virtual TInt SetObexServer( CObexServer* aObexServer );
+
+protected:
+    /**
+    * C++ default Constructor
+    */
+    inline CSrcsInterface();
+
+private:
+    // Unique instance identifier key
+    TUid iDtor_ID_Key;
+    };
+
+#include "SrcsInterface.inl"
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_plugin_api/inc/SrcsInterface.inl	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002-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:  Define SRCS's service controller ECom interface.
+*
+*/
+
+    
+// -----------------------------------------------------------------------------
+// CSrcsInterface
+// -----------------------------------------------------------------------------
+//
+inline CSrcsInterface::CSrcsInterface()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// destructor
+// -----------------------------------------------------------------------------
+//
+inline CSrcsInterface::~CSrcsInterface()
+    {
+    // Destroy any instance variables and then
+    // inform the framework that this specific
+    // instance of the interface has been destroyed.
+    REComSession::DestroyedImplementation(iDtor_ID_Key);
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// -----------------------------------------------------------------------------
+//
+inline CSrcsInterface* CSrcsInterface::NewL(TUid aImplUid)
+    {
+    return REINTERPRET_CAST(CSrcsInterface*,
+                            REComSession::CreateImplementationL(aImplUid,
+                                                                _FOFF(CSrcsInterface,iDtor_ID_Key)));
+    }
+
+// -----------------------------------------------------------------------------
+// ListAllImplementationsL
+// -----------------------------------------------------------------------------
+//
+inline void CSrcsInterface::ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray)
+    {
+    REComSession::ListImplementationsL(KCSrcsInterfaceUid, aImplInfoArray);
+    }
+
+// -----------------------------------------------------------------------------
+// ListImplementationsL
+// -----------------------------------------------------------------------------
+//
+inline void CSrcsInterface::ListImplementationsL(const TDesC8& aMatchString, RImplInfoPtrArray& aImplInfoArray)
+    {
+    TEComResolverParams resolverParams;
+    resolverParams.SetDataType(aMatchString);
+    resolverParams.SetWildcardMatch(EFalse);
+    REComSession::ListImplementationsL(KCSrcsInterfaceUid, resolverParams, aImplInfoArray);
+    }
+
+// -----------------------------------------------------------------------------
+// SetMediaType
+// -----------------------------------------------------------------------------
+//
+inline void CSrcsInterface::SetMediaType( TSrcsMediaType )
+	{	
+	}
+// -----------------------------------------------------------------------------
+// SetObexServer
+// -----------------------------------------------------------------------------
+//
+inline TInt CSrcsInterface::SetObexServer( CObexServer* )
+	{	
+	return KErrNone;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_plugin_api/obex_service_plugin_api.metaxml	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<api id="1547a7c78494bd39533b7a4a18b534e8" dataversion="2.0">
+  <name>OBEX Service Plugin API</name>
+  <description>ECom interface for implementing obex service controllers, e.g. ftp, opp service controller</description>
+  <type>c++</type>
+  <collection>localconnectivityservice</collection>
+  <libs>
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  File that exports the files belonging to 
+:                OBEX Service Utils API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/obexutilsmessagehandler.h     MW_LAYER_PLATFORM_EXPORT_PATH(obexutilsmessagehandler.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/inc/obexutilsmessagehandler.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,479 @@
+/*
+* Copyright (c) 2002 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 OBEXUTILSMESSAGEHANDLER_H
+#define OBEXUTILSMESSAGEHANDLER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <e32cmn.h>
+#include <obex.h>
+#include <msvapi.h>
+
+#include <cmsvattachment.h>
+#include <biodb.h>
+
+// CLASS DECLARATION
+
+/**
+*  Utility methods for message handling.
+*/
+class TObexUtilsMessageHandler
+    {
+    public:
+    
+        /**
+        * Get status of file system. (in C drive)
+        * @return Symbian OS errorcode
+        */
+        IMPORT_C static TInt GetFileSystemStatus();
+
+        /**
+        * Get status of file system in MMC.
+        * @return Symbian OS errorcode
+        */
+        IMPORT_C static TInt GetMmcFileSystemStatus();
+
+        /**
+        * Get current message centre drive
+        * @return Drive unit of the message centre drive
+        */
+        IMPORT_C static TInt GetMessageCentreDriveL();
+
+        /**
+        * Creates default Mtm service
+        * @param aMtm Mtm
+        */
+        IMPORT_C static void CreateDefaultMtmServiceL(TUid aMtm);
+
+        /**
+        * Saves received object to Inbox.
+        * @param aReceivedObject The object to be saved.
+        * @param aDrive The current messaging drive.
+        * @param aMtmID The message type module id.
+        * @return None.
+        */
+        IMPORT_C static void SaveObjToInboxL( CObexBufObject* aReceivedObject,
+                                              const TDesC16& aPath, 
+                                              const TUid aMtmID );
+
+        /**
+        * Creates an Outbox entry
+        * @param aMTm Message type id
+        * @param aResourceID Resource id for the message entry text
+        * @return Message server entry.
+        */
+        IMPORT_C static TMsvId CreateOutboxEntryL( const TUid& aMtm, const TInt& aResourceID );
+
+        /**
+        * Deletes an Outbox entry
+        * @param aMessageServerIndex Message server entry
+        * @return None.
+        */
+        IMPORT_C static void DeleteOutboxEntryL( const TMsvId& aMessageServerIndex );
+        
+        /**
+        * Create inbox attachment and entries.
+        * @param aBufObject The object to be saved
+        * @param aMtmId MTM Id
+        * @param aMsvIdParent Parent message entry (returned)
+        * @param aFile File to the attachment (returned)
+        * @return None.
+        */
+        IMPORT_C static void CreateInboxAttachmentL(
+            CObexBufObject* &aBufObject,
+            const TUid aMtmId,
+            TMsvId &aMsvIdParent,
+            RFile &aFile);
+        
+        /**
+         * Create inbox attachment and entries.
+         * @param aBufObject The object to be saved
+         * @param aMtmId MTM Id
+         * @param aMsvIdParent Parent message entry (returned)
+         * @param aFile File to the attachment (returned)
+         * @param aRemoteBluetoothName sender's bluetooth name.
+         * @return None.
+         */
+        IMPORT_C static void CreateInboxAttachmentL(
+            CObexBufObject* &aBufObject,
+            const TUid aMtmId,
+            TMsvId &aMsvIdParent,
+            RFile &aFile,
+            const TDesC& aRemoteBluetoothName);
+
+        /**
+        * Saves received object to Inbox.
+        * @param aReceivedObject The object to be saved (set to null after remove).
+        * @param aFile File to the attachment
+        * @param aMsvIdParent Parent message entry
+        * @return None.
+        */
+        IMPORT_C static void SaveObjToInboxL(
+            CObexBufObject* &aReceivedObject,
+            RFile &aFile,
+            TMsvId aMsvIdParent);
+        
+        /**
+        * Remove unfinished work from inbox
+        * @param aBufObject The object to be saved (set to null after remove)
+        * @param aMsvIdParent Parent message entry
+        * @return None.
+        */
+        IMPORT_C static void RemoveInboxEntriesL(CObexBufObject* &aBufObject, TMsvId aMsvIdParent);
+        
+        /**
+        * Gets central repository key's integer value
+        * @param aRepositoryUid Central repository's UID value
+        * @param aId Central repository's ID value
+        * @param aVal Returned integer value
+        * @return Symbian OS errorcode
+        */
+        IMPORT_C static TInt GetCenRepKeyIntValueL(TUid aRepositoryUid, TUint32 aId, TInt& aVal);
+        
+        /**
+        * Gets central repository key's string value
+        * @param aRepositoryUid Central repository's UID value
+        * @param aId Central repository's ID value
+        * @param aVal Returned string value
+        * @return Symbian OS errorcode
+        */
+
+        IMPORT_C static TInt GetCenRepKeyStringValueL(TUid aRepositoryUid, TUint32 aId, TDes& aVal);
+
+        /**
+        * Gets Publish & Subscribe key's integer value
+        * @param aCategory Category of the key
+        * @param aKey PUBSUB Key
+        * @param value Returned value
+        * @return Symbian OS errorcode
+        */
+        IMPORT_C static TInt GetPubSubKeyIntValue(TUid aCategory, TUint aKey, TInt& value);
+        
+        /**
+        * Create receive buffer and RFile object.
+        * @Since S60 v5.0
+        * @param aFile File to temp file
+        * @param aPath Path The directory in which the file is created
+        * @param aFullName Contains the full path and file name of the file (returned) 
+        * @param aReceiveObject Obex object for receive buffer ( returned )
+        * @param aBufSize Size of receive buffer
+        * @return Symbian error code.
+        */
+        IMPORT_C static TInt CreateReceiveBufferAndRFileL ( RFile& aFile,
+                                                            const TDesC& aPath,
+                                                            TFileName& aFullName, 
+                                                            CBufFlat* &aReceiveObject, 
+                                                            const TInt aBufSize );   
+        
+        /**
+        * Remove temporary RFile object.
+        * @Since S60 v5.0
+        * @param aFullName Contains the full path and file name of the file  
+        * @return Symbian error code.
+        */
+        IMPORT_C static void RemoveTemporaryRFileL ( const TFileName& aFullName );
+        
+        /**
+         * Create inbox entries and saves received object to file system
+         * @Since S60 v5.0
+         * @param aReceiveObject Obex object for receive buffer 
+         * @param aMtmId MTM Id
+         * @param aMsvIdParent Parent message entry (returned)
+         * @param aFullName The directory and file name in which the file is saved  (returned)
+         * @param aFile File handler identical with the one in CreateReceiveBufferAndRFileL()
+         *              it must be opened before use. 
+         * @return None
+         */ 
+        IMPORT_C static void SaveFileToFileSystemL(CObexBufObject* &aReceiveObject,
+                                                   const TUid aMtmId,
+                                                   TMsvId& aMsvIdParent,
+                                                   TFileName& aFullName,
+                                                   RFile& aFile,
+                                                   const TDesC& aSenderBluetoothName);
+        
+        /**
+         * Add an entry to Inbox
+         * @Since S60 v5.0
+         * @param aMsvIdParent Parent message entry
+         * @param aFullName Contains the full path and file name of the file
+         * @return None
+         */
+        IMPORT_C static void AddEntryToInboxL( TMsvId& aMsvIdParent,
+                                               TFileName& aFullName);
+                                               
+        /**
+         * Add an entry to Inbox
+         * @Since S60 v5.0
+         * @param aMsvIdParent Parent message entry
+         * @param aFullName Contains the full path and file name of the file
+         * @param aMsvIdArray an array contains a list of TMsvId ( returned )
+         * @return None
+         */
+        IMPORT_C static void AddEntryToInboxL( TMsvId& aMsvIdParent,
+                                              TFileName& aFullName,
+                                              RArray<TMsvId>* aMsvIdArray);
+        
+        /**
+         * Update entry attachmeent in Inbox
+         * @Since S60 v5.0
+         * @param aFullName Contains the full path and file name of the file
+         * @param aMsvIdParent Parent message entry
+         * @return None
+         */  
+        IMPORT_C static void UpdateEntryAttachmentL ( TFileName& aFullName,CMsvEntry* aParentEntry );
+        
+        
+        
+    private:
+
+        class CDummySessionObserver;
+        class TReceivedData;
+
+        /**
+        * Create inbox attachment and entries.
+        * @param aMtmId Mtm ID of the message
+        * @param aMsvIdParent Parent message entry (returned)
+        * @param aFile File to the attachment (returned)
+        * @param aRemoteBluetoothName sender's bluetooth name.
+        */
+        static void DoCreateInboxAttachmentL(
+            const TUid aMtmId,
+            TMsvId &aMsvIdParent,
+            RFile &aFile,
+            const TDesC& aRemoteBluetoothName = KNullDesC);
+
+        /**
+        * Deletes Obex Buf Object buffer
+        * @param aBufObject The buffer object
+        * @return None.
+        */
+        static void RemoveObexBuffer(CObexBufObject* &aBufObject);
+
+        /*
+        * Creates Msv session
+        * @param aSessionObs Session observer
+        * @param aMsvSession Session
+        */        
+        static void CreateMsvSessionLC(
+            CDummySessionObserver* &aSessionObs,
+            CMsvSession* &aMsvSession);
+
+        /*
+        * Creates Msv session to selected destination
+        * @param aSessionObs Session observer
+        * @param aMsvSession Session
+        * @param aDestination Destination
+        * @param aMsvId Destination type
+        */        
+        static void CreateMsvSessionLC(
+            CDummySessionObserver* &aSessionObs,
+            CMsvSession* &aMsvSession,
+            CMsvEntry* &aDestination,
+            TMsvId aMsvId);
+
+        /**
+        * Gets current time
+        * @return None.
+        */
+        static TTime GetCurrentTime();
+
+        /**
+        * Stores message as rich text
+        * @param aParentEntry Parent entry
+        * @param aFile File to store to the message entry's store
+        * @return None.
+        */        
+        static void StoreAsRichTextL(CMsvEntry* aParentEntry, RFile& aFile);
+
+        /**
+        * Updates attachment's information
+        * @param aRecData Received obex data
+        * @param aAttachEntry Attachment entry
+        * @param aAttachInfo Attachment information
+        * @param aStore Message store (attachment)
+        * @return None.
+        */
+        static void UpdateAttachmentInformationL(
+            TReceivedData& aRecData,
+            CMsvEntry* aAttachEntry,
+            CMsvAttachment* aAttachInfo,
+            CMsvStore* aStore);
+
+        /**
+        * Finalises the parent entry to contain correct data
+        * @param aParentEntry Parent entry
+        * @param aReceivedData Received obex data
+        * @param aStore Attachment's store
+        * @param aIsBioMsg Is BIO message?
+        * @return None.
+        */
+        static void FinaliseMessageL(
+            CMsvEntry* aParentEntry,
+            TReceivedData& aRecData,
+            CMsvStore* aStore,
+            TBool aIsBioMsg);
+        
+        /**
+         * Finalises the parent entry to contain correct data
+         * @Since v5.0
+         * @param aParentEntry Parent entry
+         * @param aStore Attachment's store
+         * @param aFileEntry a file entry
+         * @param aFileNameParser a file name parser
+         * @return None.
+         */
+        static void FinaliseMessageL(
+            CMsvEntry* aParentEntry,
+            CMsvStore* aStore,
+            TEntry& aFileEntry,
+            TParse& aFileNameParser);
+
+        /**
+        * Stores BIO message to parent entry's body and updates information
+        * @param aBioDB BIO database for a BIO message
+        * @param parentEntry Parent entry
+        * @param aFile File to save to parent entry's body
+        * @return None.
+        */
+        static void StoreAndUpdateBioMessageL(
+            CBIODatabase* aBioDB,
+            TUid aBioMsgId,
+            CMsvEntry* parentEntry,
+            RFile& aFile);
+        
+        /**
+        * Recognises MIME type of a file
+        * @param aFile File to recognise
+        * @param aAttachInfo Attachment information
+        * @return None.
+        */
+        static void RecogniseObjectsL(
+            TFileName& aFileName,
+            CMsvAttachment* aAttachInfo);
+
+        /**
+        * Saves MIME type and gets BIO for that MIME type
+        * @param aFile File to be recognised
+        * @param aFsSess File session to use for BIO database
+        * @param aAttachInfo Attachment information
+        * @param aBioMsgId Returned BIO message's ID
+        * @return BIO database for a MIME type (null if not BIO)
+        */
+        static CBIODatabase* SaveMimeAndGetBioLC(
+            TFileName& aFileName,
+            RFs& aFsSess,
+            CMsvAttachment* aAttachInfo,
+            TUid &aBioMsgId);
+
+        /**
+        * Constructs rich text
+        * @return Text in rich text.
+        */
+        static CRichText* ConstructRichTextLC();
+
+        /**
+        * Makes a valid OS filesystem filename by removing illegal characters
+        * @param aFileSession File server filesession
+        * @param aFileName File name to check and modify
+        * @return None.
+        */
+        static void MakeValidFileName(RFs& aFileSession, TDes& aFileName);
+
+        /**
+        * Converts text from UTF-8 to two-byte Unicode
+        * @param aText destination where to store the converted text
+        * @param aType source of conversion in UTF-8
+        * @return None.
+        */
+        static void SetBioDataTextL(TBioMsgIdText& aText, const TDesC8& aType);
+
+        /**
+        * Converts text from UTF-8 to two-byte Unicode
+        * @param aDetails destination where to store the converted text
+        * @param aType source of conversion in UTF-8
+        * @return None.
+        */
+        static void SetDetailsLC(
+            TPtrC& aDetails,
+            const TDesC8& aType);
+        
+        
+        /**
+         * Rename file and move file if needed.
+         * @Since S60 v5.0
+         * @param anOldFileName  a file name with absolute path ( returned )
+         * @param aNewFileName   new path where file will be moved to 
+         * @param aFileSession   a file session
+         * @return None
+         */
+        static TInt RenameFileL(TFileName& aFileName,
+                                TFileName& aNewFileName,
+                                const TDesC& aNewPath, 
+                                RFs& aFileSession);
+        
+        /**
+         * Rename filename with a segement number.
+         * @Since S60 v5.0
+         * @param aFilename name of the file ( returned )
+         * @param aSegmentNum number used to modifed the file name
+         * @param aSegmentString string will be added to filename to solve the duplicate filenames
+         * @return None.
+         */
+        static TInt RenameFileWithSegmentNumL(
+            TDes& aFileName, 
+            TInt aSegmentNum, 
+            TDes& aSegementString);
+        
+        /**
+         * FixExtremeLongFileName
+         * @param aFileName extreme long file name (returned)
+         * @param aDriveAndPath file drive and path 
+         * @return                          None
+         */
+        static void FixExtremeLongFileName(TFileName& aExtremeLongFileName, const TDesC& aDriveAndPath);
+
+        
+        /**
+        * A dummy class for opening CMsvSession.
+        */
+        class CDummySessionObserver : public CBase , public MMsvSessionObserver
+            {
+            public:
+                void HandleSessionEventL( TMsvSessionEvent/*aEvent*/,
+                    TAny* /*aArg1*/,
+                    TAny* /*aArg2*/,
+                    TAny* /*aArg3*/ ) {};
+            };
+
+        /**
+        * Class for obex received data
+        */
+        class TReceivedData
+            {
+            public:
+                TInt bytesReceived;
+                TTime recTime;
+                TFileName msgName;
+            };
+
+    };
+
+#endif      // OBEXUTILSMESSAGEHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/obex_service_utils_api.metaxml	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="ec631663747a5a5c917b91146caea546" dataversion="2.0">
+  <name>OBEX Service Utils API</name>
+  <description>provides common functionalities for all service controllers, e.g. showing progress bar on OBEX sending/receiving.</description>
+  <type>c++</type>
+  <collection>localconnectivityservice</collection>
+  <libs>
+    <lib name="obexutils.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/Bmarm/ObexServAPItestu.def	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/Bwins/ObexServAPItestu.def	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/conf/obexservapitest.cfg	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* 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:
+*
+*/
+
+[Test]
+title Get file system status
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetFileSystemStatus
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get MMC file system status
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetMmcFileSystemStatus
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get message center drive
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetMessageCentreDriveL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create default mtm service
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateDefaultMtmServiceL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get cenrep key int value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyIntValueL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get PubSub key int value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetPubSubKeyIntValue
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and remove outpox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateOutBoxEntry
+Message_Handler_Tester RemoveOutBoxEntry
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Crate and remove outpox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester SaveObjToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Save object to inbox
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester SaveObjToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and save attacment
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateEntryToInbox
+Message_Handler_Tester SaveRFileObjectToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and Remove attacment
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateEntryToInbox
+Message_Handler_Tester RemoveObjectFromInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get CenRep key string value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and delete receive buffer and RFile
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester RemoveTemporaryRFileL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Save receive buffer and RFile to inbox
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester SaveFileToFileSystemL
+Message_Handler_Tester AddEntryToInboxL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Update the previous Inbox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester SaveFileToFileSystemL
+Message_Handler_Tester AddEntryToInboxL
+Message_Handler_Tester UpdateEntryAttachmentL
+delete Message_Handler_Tester
+[Endtest] 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/eabi/ObexServAPItestu.def	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2002 - 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:  ?Description
+*
+*/
+
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+DEFAULT
+
+PRJ_TESTEXPORTS
+// NOTE: If using ARS requirements all export operations should be done under this.
+// 'abld test export'
+
+PRJ_EXPORTS
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in /epoc32/include
+// Example: 
+/*
+/agnmodel/inc/AGMCOMON.H
+*/
+
+PRJ_TESTMMPFILES
+// NOTE: If using ARS requirements .mmp file operation should be done under this.
+// 'abld test build'
+obexservapitest.mmp
+
+PRJ_MMPFILES
+
+//  End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/group/obexservapitest.mmp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,63 @@
+/*TYPE TESTCLASS*//*
+* Copyright (c) 2002 - 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:  ?Description
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          obexservapitest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID     0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID     0x00000000
+
+//TARGETPATH      ?target_path
+DEFFILE         ObexServAPItest.def
+
+SOURCEPATH      ../src
+SOURCE          ObexServAPItest.cpp
+SOURCE          ObexServAPItestBlocks.cpp
+SOURCE          testlogger.cpp
+
+
+USERINCLUDE     ../inc 
+
+#if defined(__S60_)
+  //  OSEXT_LAYER_SYSTEMINCLUDE
+    MW_LAYER_SYSTEMINCLUDE
+#else
+    //SYSTEMINCLUDE   /epoc32/include 
+    //SYSTEMINCLUDE   /epoc32/include/internal
+#endif
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         sysutil.lib
+LIBRARY         obexutils.lib
+LIBRARY         irobex.lib
+LIBRARY         efsrv.lib 
+LIBRARY 	msgs.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/group/obexservapitest.pkg	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,65 @@
+;
+; 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:
+;
+;
+; Installation file for STIF
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"obexservapitest"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.1
+[0x10283160], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"\epoc32\release\armv5\udeb\obexservapitest.dll"-"c:\Sys\Bin\obexservapitest.dll"
+
+"..\conf\obexservapitest.cfg"-"e:\testing\conf\obexservapitest.cfg"
+"..\init\obexservapitest.ini"-"e:\testing\init\obexservapitest.ini"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/inc/ObexServAPItest.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2002 - 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:  ?Description
+*
+*/
+
+
+
+#ifndef OBEXSERVAPITEST_H
+#define OBEXSERVAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <ObexUtilsMessageHandler.h>
+#include "testlogger.h"
+
+
+// FORWARD DECLARATIONS
+class CObexServAPItest;
+
+
+// CLASS DECLARATION
+
+/**
+*  CObexServAPItest test class for STIF Test Framework TestScripter.
+*/
+NONSHARABLE_CLASS(CObexServAPItest) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CObexServAPItest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CObexServAPItest();
+
+    public: // New functions
+
+       
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CObexServAPItest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+        
+        void TestCompleted( TInt aErr, const TUint8* aFunc, const TDesC& aArg );
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        /**
+        * Test code for getting file system status.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetFileSystemStatusL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for getting mmc file system status.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetMmcFileSystemStatusL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for getting message center drive. 
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetMessageCentreDriveL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating Default MTM services.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateDefaultMtmServiceL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Getting CenRep key.    .    
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetCenRepKeyIntValueL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Getting PubSub key.    
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetPubSubKeyIntValueL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Creating outbox entry.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateOutBoxEntryL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for removing outbox entry.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt RemoveOutBoxEntryL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for save received file to inbox. 
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt SaveObjToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateEntryToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt SaveRFileObjectToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for removing entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt RemoveObjectL( CStifItemParser& aItem );
+        
+        TInt CObexServAPItest::GetCenRepKeyStringValueL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::CreateReceiveBufferAndRFileL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::SaveFileToFileSystemL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::AddEntryToInboxL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::UpdateEntryAttachmentL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::RemoveTemporaryRFileL( CStifItemParser& aItem ); 
+
+    private:    // Data
+
+        /**
+        * A dummy class for opening CMsvSession.
+        */
+        class CDummySessionObserver : public CBase , public MMsvSessionObserver
+            {
+            public:
+                void HandleSessionEventL( TMsvSessionEvent/*aEvent*/,
+                    TAny* /*aArg1*/,
+                    TAny* /*aArg2*/,
+                    TAny* /*aArg3*/ ) {};
+            };
+        
+        
+        
+         TMsvId           iMessageServerIndex;
+         CObexBufObject*  iObexObject; 
+         RFs              iRFs;
+         RFile            iFile;
+         CBufFlat*        iBuf; 
+         CObexTestLogger* iTestLogger;
+         TFileName        iCenRepFolder;
+         TFileName        iTempFullPathFilename; 
+    };
+
+#endif      // OBEXSERVAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/inc/testlogger.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* 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:
+*
+*/
+
+
+#ifndef BTTESTLOGGER_H
+#define BTTESTLOGGER_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CStifLogger;
+class CTestModuleIf;
+
+#define TLFUNCLOG (TUint8*) __FUNCTION__
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( CObexTestLogger ) : public CBase
+{
+	public:
+	
+		static CObexTestLogger* NewL(const CTestModuleIf* aTestModuleIf);
+		virtual ~CObexTestLogger();
+
+	public: // Data used by functions
+
+		enum TLogLevel {ETLError, ETLResult, ETLInfo, ETLDebug};
+
+	public: // New functions
+	
+		TBool GetEnabled() const;
+		CStifLogger* GetLogger() const;
+		const CTestModuleIf* GetTestModuleIf() const;
+		TInt Log(TLogLevel aLevel, TRefByValue<const TDesC8> aLogText, ...) const;
+		TInt Log(const TDesC& aCategory, TRefByValue<const TDesC8> aLogText, ...) const;
+		TInt Log(TLogLevel aLevel, TRefByValue<const TDesC16> aLogText, ...) const;
+		TInt Log(const TDesC& aCategory, TRefByValue<const TDesC16> aLogText, ...) const;
+		TInt LogResult( const TDesC8& aFunc, const TDesC& aArg, TInt aRes ) const;
+		TInt LogNewLine() const;
+		void SetEnabled(TBool aEnabled);
+		void SetLogger(CStifLogger* aLog);
+		void SetTestModuleIf(const CTestModuleIf* aTestModuleIf);
+
+	public: // Functions from base classes
+
+	private:  // New functions
+
+		TInt WriteLog(TLogLevel aLevel, TDes16& aLog) const;
+		TInt WriteLog(const TDesC16& aCategory, const TDesC16& aLog) const;
+		static TPtrC GetPrefix(TLogLevel aLevel);
+		TInt CheckLogFile();
+		void LogHeadSectionL();
+		void LogTimeStampL(TDes& aBuf, TBool aTime = ETrue) const;
+
+	private:  // Constructors
+	
+		CObexTestLogger(const CTestModuleIf* aTestModuleIf);
+		void ConstructL();
+
+	public:     // Data
+		static const TInt KPrefixLength;
+
+	private:    // Data
+
+		TBool iEnabled;
+		CStifLogger* iLog;
+		const CTestModuleIf* iTestModuleIf;
+	};
+
+#endif // BTTESTLOGGER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/init/obexservapitest.ini	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,233 @@
+#
+# 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:
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                              #                      'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= e:\testing\logs\
+TestReportFileName= obexServApiTest_TestReport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+#UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= e:\testing\conf\obexservapitest.cfg
+[End_Module]
+
+
+# Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+CreateLogDirectories= YES		# Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/rom/obexservapitest.iby	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2007-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:  Image description file for project bteng
+*
+*/
+
+#ifndef BTENGAPITEST_IBY
+#define BTENGAPITEST_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\ObexServAPItest.dll			SHARED_LIB_DIR\ObexServAPItest.dll
+
+#endif // BTENGAPITEST_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/src/ObexServAPItest.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002 - 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:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "ObexServAPItest.h"
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CObexServAPItest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CObexServAPItest::CObexServAPItest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CObexServAPItest::ConstructL()
+    {
+    
+    iTestLogger = CObexTestLogger::NewL( &TestModuleIf() );         
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CObexServAPItest* CObexServAPItest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CObexServAPItest* self = new (ELeave) CObexServAPItest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CObexServAPItest::~CObexServAPItest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iTestLogger; 
+    iTestLogger = NULL;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CObexServAPItest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/src/ObexServAPItestBlocks.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,630 @@
+/*
+* Copyright (c) 2002 - 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:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <UiklafInternalCRKeys.h>
+#include <UikonInternalPSKeys.h>
+#include <Obexutils.rsg>
+#include <obex.h>
+#include "testlogger.h"
+#include "ObexServAPItest.h"
+
+#include    <btengdomaincrkeys.h> 
+
+// CONSTANTS
+const TInt    KBufferSize = 0x4000;  // 16kB
+
+// Defined to coincide with the definition in btmsgtypeuid.h 
+const TUid KUidMsgTypeBt                 = {0x10009ED5};
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CObexServAPItest::Delete() 
+    {
+    delete iObexObject;
+    iObexObject = NULL;
+    delete iBuf;
+    iBuf = NULL;
+    iRFs.Close(); 
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        ENTRY( "GetFileSystemStatus", CObexServAPItest::GetFileSystemStatusL ),
+        ENTRY( "GetMmcFileSystemStatus", CObexServAPItest::GetMmcFileSystemStatusL ),
+        ENTRY( "GetMessageCentreDriveL", CObexServAPItest::GetMessageCentreDriveL ),
+        ENTRY( "CreateDefaultMtmServiceL", CObexServAPItest::CreateDefaultMtmServiceL ),
+        ENTRY( "GetCenRepKeyIntValueL", CObexServAPItest::GetCenRepKeyIntValueL ),
+        ENTRY( "GetPubSubKeyIntValue", CObexServAPItest::GetPubSubKeyIntValueL ),
+        ENTRY( "CreateOutBoxEntry", CObexServAPItest::CreateOutBoxEntryL ),
+        ENTRY( "RemoveOutBoxEntry", CObexServAPItest::RemoveOutBoxEntryL ),
+        ENTRY( "SaveObjToInbox", CObexServAPItest::SaveObjToInboxL ),
+        ENTRY( "CreateEntryToInbox", CObexServAPItest::CreateEntryToInboxL ),
+        ENTRY( "SaveRFileObjectToInbox", CObexServAPItest::SaveRFileObjectToInboxL ),
+        ENTRY( "RemoveObjectFromInbox", CObexServAPItest::RemoveObjectL ),
+        ENTRY( "GetCenRepKeyStringValueL", CObexServAPItest::GetCenRepKeyStringValueL), // JHä 
+        ENTRY( "CreateReceiveBufferAndRFileL", CObexServAPItest::CreateReceiveBufferAndRFileL), // JHä 
+        ENTRY( "RemoveTemporaryRFileL", CObexServAPItest::RemoveTemporaryRFileL), // JHä 
+        ENTRY( "SaveFileToFileSystemL", CObexServAPItest::SaveFileToFileSystemL), // JHä 
+        ENTRY( "AddEntryToInboxL", CObexServAPItest::AddEntryToInboxL), // JHä 
+        ENTRY( "UpdateEntryAttachmentL", CObexServAPItest::UpdateEntryAttachmentL), // JHä 
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+    
+ // -----------------------------------------------------------------------------
+// CBtApiTest::TestCompleted
+// -----------------------------------------------------------------------------
+//  
+void CObexServAPItest::TestCompleted( TInt aErr, const TUint8* aFunc, const TDesC& aArg )
+    {
+    iTestLogger->LogResult( (TPtrC8( aFunc )), aArg, aErr );
+    Signal( aErr );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetFileSystemStatusL
+// Test code for getting file system status.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetFileSystemStatusL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to log file
+    TInt retVal=TObexUtilsMessageHandler::GetFileSystemStatus();
+    if (retVal == 0 || retVal == KErrDiskFull)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetFileSystemStatusL"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("Error getting files ystem status"));    
+        }    
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetMmcFileSystemStatusL
+// Test code for getting mmc file system status.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetMmcFileSystemStatusL( CStifItemParser& /*aItem*/ )
+    {
+    TInt retVal=TObexUtilsMessageHandler::GetMmcFileSystemStatus();
+    if (retVal == 0 || retVal == KErrDiskFull)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetFileSystemStatusL"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("Error getting files ystem status"));    
+        }    
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetMessageCentreDriveL
+// Test code for getting message center drive. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetMessageCentreDriveL( CStifItemParser& /*aItem*/ )
+    {
+    
+    TInt retVal = TObexUtilsMessageHandler::GetMessageCentreDriveL();
+    if (retVal >= 0 )
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetMessageCentreDrive"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("GetMessageCentreDrive failed"));    
+        }    
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateDefaultMtmServiceL
+// Test code for creating Default MTM services.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateDefaultMtmServiceL( CStifItemParser& /*aItem*/ )
+    {
+
+    TRAPD(error, TObexUtilsMessageHandler::CreateDefaultMtmServiceL(KUidMsgTypeBt) );
+    if (error == KErrNone)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("CreateDefaultMtmServiceL"));        
+        }
+    else
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateDefaultMtmServiceL"));                       
+        }
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetCenRepKeyIntValueL
+// Test code for Getting CenRep key.    
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetCenRepKeyIntValueL( CStifItemParser&  /*aItem*/ )  // JHä note: Is return code handling done right? 
+    {
+    TInt limit=0;    
+    TInt error=0;
+    TRAPD(leaveVal, error = TObexUtilsMessageHandler::GetCenRepKeyIntValueL(KCRUidUiklaf,
+                                                                KUikOODDiskCriticalThreshold,
+                                                                limit));
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyIntValueL leaves"));                       
+        }    
+    else if (error == KErrNone)
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyIntValue return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetCenRepKeyIntValueL"));                           
+        }    
+    
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetPubSubKeyIntValueL
+// Test code for Getting PubSub key.    
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetPubSubKeyIntValueL( CStifItemParser& /*aItem*/ )
+    {
+    TInt status = KErrNone;
+    TInt retVal = KErrNone;
+    
+    TRAPD(leaveVal, retVal = TObexUtilsMessageHandler::GetPubSubKeyIntValue(KPSUidUikon, KUikFFSFreeLevel, status));
+    
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetPubSubKeyIntValueL leaves"));                       
+        }    
+    else if (retVal == KErrNone)
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("GetPubSubKeyIntValueL return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetPubSubKeyIntValue"));                           
+        }  
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::OutBoxEntryL
+// Test code for Creating outbox entry.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateOutBoxEntryL( CStifItemParser& /*aItem*/ )
+    {    
+    TRAPD(error, iMessageServerIndex = TObexUtilsMessageHandler::CreateOutboxEntryL( KUidMsgTypeBt, R_BT_SEND_OUTBOX_SENDING ));  
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateOutBoxEntryL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("CreateOutBoxEntryL"));     
+        }
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::OutBoxEntryL
+// Test code for removing outbox entry.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RemoveOutBoxEntryL( CStifItemParser& /*aItem*/ )
+    {   
+    
+    TRAPD(error, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ));
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveOutBoxEntryL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("RemoveOutBoxEntryL"));     
+        }
+    return KErrNone;
+
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexServAPItest::SaveObjToInboxL
+// Test code for save received file to inbox. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::SaveObjToInboxL( CStifItemParser& /*aItem*/ )
+    {   
+    
+    CObexBufObject* obexobject = CObexBufObject::NewL( NULL );
+    CleanupStack::PushL(obexobject);    
+    
+    TRAP_IGNORE(TObexUtilsMessageHandler::SaveObjToInboxL(obexobject ,
+                                              KNullDesC, 
+                                              KUidMsgTypeBt ));
+    TestCompleted( KErrNone, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+    
+    CleanupStack::PopAndDestroy(obexobject);
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateAndSaveObjectL
+// Test code for creating entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateEntryToInboxL( CStifItemParser& /*aItem*/ )
+    {
+    iFile = RFile();
+    
+    if ( iObexObject)
+        {
+        delete iObexObject;
+        iObexObject = NULL;
+        }
+        
+    iObexObject = CObexBufObject::NewL( NULL );
+    
+    TRAPD( error, TObexUtilsMessageHandler::CreateInboxAttachmentL( iObexObject,
+                                                      KUidMsgTypeBt,
+                                                      iMessageServerIndex,
+                                                      iFile));
+                                                      
+                                                      
+    iBuf = CBufFlat::NewL(1024);
+    iBuf->ResizeL(1024);
+    
+    TObexRFileBackedBuffer bufferdetails(*iBuf,iFile,CObexBufObject::EDoubleBuffering);    
+    
+    TRAP_IGNORE( iObexObject->SetDataBufL( bufferdetails) );
+    
+                                                      
+                                                      
+    iFile.Write(_L8("test"));    
+    iObexObject->SetNameL(_L("test.txt"));        
+    
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateEntryToInboxL leaves")); 
+        }    
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateEntryToInboxL"));     
+        }         
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateAndSaveObjectL
+// Test code for creating entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::SaveRFileObjectToInboxL( CStifItemParser& /*aItem*/ )
+    {
+    TRAPD( error, TObexUtilsMessageHandler::SaveObjToInboxL(
+            iObexObject,
+            iFile,
+            iMessageServerIndex));
+    
+    delete iBuf;
+    iBuf = NULL;
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL"));     
+        }                                          
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::RemoveObjectL
+// Test code for removing entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RemoveObjectL( CStifItemParser& /*aItem*/ )
+    {
+    TRAPD(error,TObexUtilsMessageHandler::RemoveInboxEntriesL(iObexObject, iMessageServerIndex));    
+    delete iBuf;
+    iBuf = NULL;
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Find out the path of the receive folder. 
+TInt CObexServAPItest::GetCenRepKeyStringValueL( CStifItemParser& /*aItem*/ ) // JHä  - Done 
+    {
+    TInt error = KErrNone;
+    TRAPD(leaveVal, error = TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine,
+                                                                KLCReceiveFolder,
+                                                                iCenRepFolder));
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyStringValueL leaves"));                       
+        }    
+    else if (error != KErrNone)
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyStringValueL return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetCenRepKeyStringValueL"));                           
+        }    
+
+    return KErrNone;    
+   	}
+
+// Create the receive buffer and temporary receive file. 
+TInt CObexServAPItest::CreateReceiveBufferAndRFileL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    TFileName defaultFolder;
+    defaultFolder.Zero();
+
+    User::LeaveIfError(iRFs.Connect());
+    
+    iFile = RFile(); // Creating an empty file. 
+
+    // Ensure that the object and buffer don't exist. 
+    // This also deletes the previous iFile object, if any existed, 
+    //  because its handle is held by iObexObject.  
+    if(iObexObject)
+        {
+        delete iObexObject;
+        iObexObject = NULL;
+        }
+    if( iBuf )
+        {
+        delete iBuf;    
+        iBuf=NULL;
+        }
+
+    // Then create a new obex object for holding the buffer and the temp file. 
+    iObexObject = CObexBufObject::NewL( NULL );
+
+    defaultFolder.Append(_L("C:\\data\\"));
+    defaultFolder.Append(iCenRepFolder);   // Got this from central repository in GetCenRepKeyStringValueL
+
+    TRAPD(error,TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL( iFile,  // Out: But iFile is returned as closed. 
+                                                                        defaultFolder, // Where to create the temp file.  
+                                                                        iTempFullPathFilename, // Out: Can be used to open the file later. 
+                                                                        iBuf,   // Out: This contains the message buffer. 
+                                                                        KBufferSize));
+
+    // Open the file again. 
+    User::LeaveIfError(iFile.Open(iRFs, iTempFullPathFilename, EFileWrite));   
+
+    TObexRFileBackedBuffer bufferdetails(*iBuf,iFile,CObexBufObject::EDoubleBuffering);    
+    
+    // Do we really need to trap leaves here? Maybe because of Stif?  
+    TRAP(error, iObexObject->SetDataBufL( bufferdetails) );
+    if (error != KErrNone)
+        {
+        error = KErrGeneral;  
+        }
+
+    iFile.Write(_L8("test")); // Put some test data into the file, although it is not mandatory.      
+    iFile.Flush();
+
+    iObexObject->SetNameL(_L("test.txt"));        
+
+    // At this point we have an object in file system (iFile refers to it)    
+    // and an entry in Inbox which we can later refer to with iMessageServerIndex.  
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateReceiveBufferAndRFileL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateReceiveBufferAndRFileL"));     
+        }                                              
+
+    // iFile is left open  
+    return KErrNone;
+    }
+
+// Copy the temporary receive file to the correct place in the file system after receiving is complete. 
+TInt CObexServAPItest::SaveFileToFileSystemL( CStifItemParser& /*aItem*/ ) // JHä - Done
+    {
+    // Create bogus device name. 
+    TBTDeviceName remoteDeviceName;
+	remoteDeviceName.Zero(); 
+	remoteDeviceName.Append(_L("APITestDevice")); 
+
+// The iFile must be still open after calling CreateReceiveBufferAndRFileL method 
+	
+    TRAPD(error,TObexUtilsMessageHandler::SaveFileToFileSystemL(   iObexObject,
+                                                                   KUidMsgTypeBt,
+                                                                   iMessageServerIndex,	// This is gotten  
+                                                                   iTempFullPathFilename, // Contains the final path of the file
+                                                                   iFile,   // Handle to the temp file. 
+                                                                   remoteDeviceName)); 
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveFileToFileSystemL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveFileToFileSystemL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Create an entry in the Inbox and attach the file there. 
+TInt CObexServAPItest::AddEntryToInboxL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    RArray<TMsvId>  tmpMsvIdArray; // Not really needed, but must be passed to the method. 
+    
+    TRAPD(error,TObexUtilsMessageHandler::AddEntryToInboxL( iMessageServerIndex, 
+                                                            iTempFullPathFilename, 
+                                                            &tmpMsvIdArray));
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("AddEntryToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("AddEntryToInboxL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Replacing a broken link in Inbox with a proper link to a file. 
+TInt CObexServAPItest::UpdateEntryAttachmentL( CStifItemParser& /*aItem*/ ) // JHä - Done
+    {
+    // Create a new file to be the replacement: 
+    TFileName tempFilename; 
+    TFileName defaultFolder;
+    RFs rfs; 
+    RFile newFile;  
+
+    User::LeaveIfError(rfs.Connect());
+    CleanupClosePushL(rfs);  
+
+    defaultFolder.Zero();
+    defaultFolder.Append(_L("C:\\data\\"));
+    defaultFolder.Append(iCenRepFolder);   // Got this from central repository in GetCenRepKeyStringValueL
+    User::LeaveIfError( newFile.Temp( rfs, defaultFolder, tempFilename, EFileWrite) );
+    newFile.Write(_L8("testing replacing"));    
+    newFile.Flush();
+    newFile.Close(); 
+
+    CleanupStack::PopAndDestroy(); // rfs  
+
+    // Then replace the attachment: 
+    CDummySessionObserver* sessionObs = new( ELeave )CDummySessionObserver;;
+    CleanupStack::PushL( sessionObs );  
+    CMsvSession* msvSession = CMsvSession::OpenSyncL( *sessionObs );
+    CleanupStack::PushL(msvSession);
+    CMsvEntry* entry = msvSession->GetEntryL(iMessageServerIndex);
+    CleanupStack::PushL(entry);
+    TRAPD(error,TObexUtilsMessageHandler::UpdateEntryAttachmentL(tempFilename, entry));    
+
+    // Cleanup: 
+    CleanupStack::PopAndDestroy(3); // entry, msvSession, sessionObs, 
+    
+    // Save the path to the new file so it can be referred to later.  
+    iTempFullPathFilename = tempFilename; 
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("UpdateEntryAttachmentL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("UpdateEntryAttachmentL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Delete the temporary file. Called normally when the link is broken and the user searches for the file. 
+// In test code this should be called after creating the temporary RFile and before 
+// creating the Inbox entry. 
+TInt CObexServAPItest::RemoveTemporaryRFileL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    TRAPD(error,TObexUtilsMessageHandler::RemoveTemporaryRFileL(iTempFullPathFilename));    
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveTemporaryRFileL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveTemporaryRFileL"));     
+        }                                              
+    return KErrNone;
+    }
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/obex_service_utils_api/tsrc/src/testlogger.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,530 @@
+/*
+* 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:
+*
+*/
+
+// INCLUDES
+
+#include "testlogger.h"
+
+#include <StifTestModule.h>
+#include <StifLogger.h>
+
+#include <e32std.h>
+#include <f32file.h>
+#include <sysutil.h>
+
+// RDebug
+#include <e32debug.h>
+
+const TInt CObexTestLogger::KPrefixLength = 8;
+// Timestamp string length
+const TInt KTimeStampStrLen = 21;
+// Extended Timestamp string length
+const TInt KExtTimeStampStrLen = 40;
+// Extended time stamp
+typedef TBuf<KExtTimeStampStrLen> TExtTimeStamp;
+// Logging path
+_LIT( KObexServAPITestSystemLogPath, "e:\\logs\\ObexServAPItest\\" );
+// Log file
+_LIT( KObexServAPITestSystemLogFile, "ObexServAPItest.html" );
+// Log file
+_LIT( KObexServAPITestSystemLogFullName, "\\logs\\ObexServAPItest\\ObexServAPItest%x.html" );
+// Time stamp format string
+_LIT( KFormatTimeStamp, "<br/>[%H:%T:%S.%*C4] " );
+// Date format string
+_LIT( KFormatDate, "%F%D %N %Y" );
+// HTML header section
+_LIT( KHtmlHeadSection, "<html>\n<head>\n<title>Obex Message Handler Test System results</title>\n<style type=\"text/css\">\n.res, .case { display: inline; }\n</style>\n</head>\n\n<body onLoad=\"FormatResults();\">\n\n" );
+// HTML code which will display the statistics
+_LIT( KHtmlStatSection, "<p>Logfile created on %S at %S<br />\nS60 version %S</p>\n\n<div id=\"stats\"></div>\n<br />\n\n" );
+// HTML identifier for test case start
+_LIT( KHtmlTestCaseStart, "<div class=\"case\">" );
+// Test case result logging
+_LIT( KTestCaseResult, "Test completed; function %S, parameter %S, result <div class=\"res\">%d</div></div>" );
+// JavaScript function for calculating test result
+#define KJSSECTION _L( "<script type=\"text/javascript\">\nfunction FormatResults() { \
+\n\tvar tl = document.getElementsByTagName( \"div\" );\n\tvar passed = 0, failed = 0, testcases = 0; \
+\n\tfor( var i = 0; i < tl.length; i++ ) {\n\t\tif( tl[i].className == \"case\" ) {\n\t\t\ttestcases++;\n\t\t\t} \
+\n\t\tif( tl[i].className == \"res\" ) {\n\t\t\tif( tl[i].innerHTML == 0 ) {\n\t\t\t\tpassed++;\n\t\t\t\t} \
+\n\t\t\telse {\n\t\t\t\tfailed++;\n\t\t\t\ttl[i].parentNode.style.color = \"red\";\n\t\t\t\t} } } \
+\n\tvar stat = document.getElementById( \"stats\" );\n\tvar passrate = Math.round( ( passed / testcases ) * 10000 ) / 100; \
+\n\tstat.innerHTML = \"Test cases run: \" + testcases + \"<br />Passed: \" + passed \
++\"<br />Failed: \" + failed + \"<br /><b>Passrate: \" + passrate + \"%%</b>\";\n\t}\n</script>" )
+
+// Construction and destruction.
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::NewL
+// Static constructor to constructor builder objects.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger* CObexTestLogger::NewL(const CTestModuleIf* aTestModuleIf)
+	{
+	CObexTestLogger* self = new (ELeave) CObexTestLogger(aTestModuleIf);
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::CObexTestLogger
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger::CObexTestLogger(const CTestModuleIf* aTestModuleIf)
+	: CBase(),
+	  iEnabled(ETrue),
+	  iTestModuleIf(aTestModuleIf)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTestLogger::ConstructL
+// 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::ConstructL()
+    {
+    TInt err = CheckLogFile();
+    iLog = CStifLogger::NewL( KObexServAPITestSystemLogPath, KObexServAPITestSystemLogFile,
+                              CStifLogger::ETxt, CStifLogger::EFile, EFalse, EFalse );
+    if( err == KErrNotFound )
+        {   // Add info & HTML markup to the beginning of the log file.
+        LogHeadSectionL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::~CObexTestLogger
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger::~CObexTestLogger()
+	{
+	delete iLog;
+	}
+
+// Member functions.
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetLogger
+// Returns a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+CStifLogger* CObexTestLogger::GetLogger() const
+	{
+	return iLog;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetTestModuleIf
+// Returns a pointer to current STIF test module interface.
+// -----------------------------------------------------------------------------
+//
+const CTestModuleIf* CObexTestLogger::GetTestModuleIf() const
+	{
+	return iTestModuleIf;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 8 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(TLogLevel aLevel, TRefByValue<const TDesC8> aLogText, ...) const
+    {
+    if (!iEnabled)
+        {
+        return KErrNone;
+        }
+
+    const TDesC8& actualData = aLogText;
+
+    // Check that user does not try to output too much data.
+    if (actualData.Length() > KMaxLogData - KPrefixLength)
+        {
+        return KErrTooBig;
+        }
+
+    // Buffer to convert 8 bit data to to 16 bit.
+    TLogInfo8 converter;
+
+    // Create variable argument list.
+    VA_LIST args;
+    VA_START(args, aLogText);
+
+    // Format the argument list to the output buffer.
+    converter.FormatList( aLogText, args );
+
+    // Free the variable argument list
+    VA_END(args);
+
+    TLogInfo buffer;
+    buffer.Copy( converter );
+
+    // Append log prefix to the output buffer.
+    buffer.Insert( 0, GetPrefix( aLevel ) );
+
+    // Log a timestamp
+    TStifLoggerTimeStamp8 time;
+    TRAP_IGNORE( LogTimeStampL( time ) );
+    buffer.Insert( 0, time );
+
+    // Write log.
+    return WriteLog(aLevel, buffer);
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 8 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(const TDesC& aCategory, TRefByValue<const TDesC8> aLogText, ...) const
+    {
+    if (!iEnabled)
+	    {
+        return KErrNone;
+        }
+
+    const TDesC8& actualData = aLogText;
+
+    // Check that user does not try to output too much data.
+    if (actualData.Length() > KMaxLogData - KPrefixLength)
+        {
+        return KErrTooBig;
+        }
+
+    // Buffer to convert 8 bit data to to 16 bit.
+    TLogInfo8 converter;
+
+    // Create variable argument list.
+    VA_LIST args;
+    VA_START(args, aLogText);
+
+    // Format the argument list to the output buffer.
+    converter.FormatList(aLogText, args);
+
+    // Free the variable argument list
+    VA_END(args);
+
+    TLogInfo buffer;
+    buffer.Copy( converter );
+
+    // Log a timestamp
+    TStifLoggerTimeStamp8 time;
+    TRAP_IGNORE( LogTimeStampL( time ) );
+    buffer.Insert( 0, time );
+
+    // Write log.
+    return WriteLog(aCategory, buffer);
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 16 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(TLogLevel aLevel, TRefByValue<const TDesC16> aLogText, ...) const
+	{
+	if (!iEnabled)
+		{
+		return KErrNone;
+		}
+
+	const TDesC16& actualData = aLogText;
+	// Check that user does not try to output too much data.
+	if (actualData.Length() + KPrefixLength > KMaxLogData)
+		{
+		return KErrTooBig;
+		}
+
+	TLogInfo buffer;
+
+	// Log a timestamp
+	TRAP_IGNORE( LogTimeStampL( buffer ) );
+
+	// Create variable argument list.
+	VA_LIST args;
+	VA_START(args, aLogText);
+
+	// Format the argument list to the output buffer.
+	buffer.AppendFormatList(aLogText, args);
+
+	// Free the variable argument list
+	VA_END(args);
+
+	// Write log.
+	return WriteLog(aLevel, buffer);
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 16 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(const TDesC& aCategory, TRefByValue<const TDesC16> aLogText, ...) const
+	{
+	if (!iEnabled)
+		{
+		return KErrNone;
+		}
+
+	const TDesC16& actualData = aLogText;
+	// Check that user does not try to output too much data.
+	if (actualData.Length() + KPrefixLength > KMaxLogData)
+		{
+		return KErrTooBig;
+		}
+
+	TLogInfo buffer;
+
+	// Log a timestamp
+	TRAP_IGNORE( LogTimeStampL( buffer ) );
+
+	// Create variable argument list.
+	VA_LIST args;
+	VA_START(args, aLogText);
+
+	// Format the argument list to the output buffer.
+	buffer.AppendFormatList(aLogText, args);
+
+	// Free the variable argument list
+	VA_END(args);
+
+	// Write log.
+	return WriteLog(aCategory, buffer);
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogNewLine
+// Logs an HTML  newline and timestamp.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::LogResult( const TDesC8& aFunc, const TDesC& aArg, TInt aRes ) const
+    {
+    TExtTimeStamp func;
+    func.Copy( aFunc ); // Copy 8-bit string to 16-bit buffer
+
+    Log( CObexTestLogger::ETLResult, KTestCaseResult, &func, &aArg, aRes );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogNewLine
+// Logs an HTML  newline and timestamp.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::LogNewLine() const
+    {
+    if (!iEnabled)
+        {
+        return KErrNone;
+        }
+    TExtTimeStamp time;
+    TRAPD( err, LogTimeStampL( time ) );
+    if( !err )
+        {
+        time.Insert( 0, KHtmlTestCaseStart );
+        err = iLog->Log( time );
+        }
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetEnabled
+// Returns a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetEnabled(TBool aEnabled)
+	{
+	iEnabled = aEnabled;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetLogger
+// Sets a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetLogger(CStifLogger* aLog)
+	{
+	iLog = aLog;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetTestModuleIf
+// Sets a pointer to current STIF test module.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetTestModuleIf(const CTestModuleIf* aTestModuleIf)
+	{
+	iTestModuleIf = aTestModuleIf;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::WriteLog
+// Writes log.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::WriteLog(TLogLevel aLevel, TDes16& aLog) const
+    {
+    // Write log to file if file logger is available.
+    if (iLog != 0)
+        {
+        iLog->Log(aLog);
+        }
+    // Remove the timestamp from the logging data.
+    TPtrC16 log( aLog.Mid( KTimeStampStrLen ) );
+
+    // Write log with RDebug.
+    RDebug::Print(log);
+
+    // Write log to screen if test module interface is available.
+	if (iTestModuleIf != 0)
+        {
+        CTestModuleIf* nonStaticLogger = const_cast<CTestModuleIf*>(iTestModuleIf);
+        nonStaticLogger->Printf(aLevel, _L(""), log);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::WriteLog
+// Writes log.
+// -----------------------------------------------------------------------------
+//
+TInt  CObexTestLogger::WriteLog(const TDesC16& aCategory, const TDesC16& aLog) const
+    {
+    // Write log to file if file logger is available.
+    if (iLog != 0)
+        {
+        iLog->Log(aLog);
+        }
+    // Remove the timestamp from the logging data.
+    TPtrC16 log( aLog.Mid( KTimeStampStrLen ) );
+
+    // Write log with RDebug.
+    RDebug::Print(log);
+
+    // Write log to screen if test module interface is available.
+    if (iTestModuleIf != 0)
+        {
+        CTestModuleIf* nonStaticLogger = const_cast<CTestModuleIf*>(iTestModuleIf);
+        nonStaticLogger->Printf(0, aCategory, log);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetPrefix
+// Returns the prefix for a given logging level.
+// -----------------------------------------------------------------------------
+//
+TPtrC CObexTestLogger::GetPrefix(TLogLevel aLevel)
+	{
+	// Select a prefix for a log level and return a pointer to it.
+	switch(aLevel)
+		{
+		case ETLError:
+			{
+			TPtrC logPrefix = _L("ERROR : ");
+			return logPrefix;
+			}
+		case ETLInfo:
+		case ETLResult: 
+			{
+			TPtrC logPrefix = _L("INFO  : ");
+			return logPrefix;
+			}
+		case ETLDebug:
+			{
+			TPtrC logPrefix = _L("DEBUG : ");
+			return logPrefix;
+			}
+		default:
+			{
+			// Return a null pointer.
+			return TPtrC();
+			}
+
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::CheckLogFile
+// Check if a log file is already existing, otherwise HTML formatting 
+// should be added.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::CheckLogFile()
+    {
+    RThread thread;
+    TInt id = thread.Id();
+    TBuf<KMaxFileName > file;
+    file.Format( KObexServAPITestSystemLogFullName, id );
+    RFs fs;
+    TInt err = fs.Connect();
+    TBool open = EFalse;
+    if( !err )
+        {
+        err = fs.IsFileOpen( file, open );
+        }
+    fs.Close();
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogTimeStamp
+// Log HTML head section and general information in a newly created logfile.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::LogHeadSectionL()
+    {
+    iLog->Log( KHtmlHeadSection );
+    iLog->Log( KJSSECTION );
+    TBuf<KSysUtilVersionTextLength> version( _L( "Version unknown!" ) );
+    (void) SysUtil::GetSWVersion( version );
+    TStifLoggerTimeStamp8 date;
+    LogTimeStampL( date, EFalse );
+    TStifLoggerTimeStamp8 time;
+    LogTimeStampL( time );
+    TPtrC timePtr( time.Mid( 6, 13 ) );
+    iLog->Log( KHtmlStatSection, &date, &timePtr, &version );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogTimeStamp
+// Format a timestamp for logging.
+// If aTime is set to false, the (formatted) date is returned.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::LogTimeStampL(TDes& aBuf, TBool aTime) const
+    {
+    TTime time;
+    time.HomeTime();    // Get time and format it
+    if( aTime )
+        {
+        time.FormatL( aBuf, KFormatTimeStamp );
+        }
+    else
+        {
+        time.FormatL( aBuf, KFormatDate );
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/usb_obexservicemanager_client_api/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  File that exports the files belonging to 
+:                USB OBEX Service Manager Client API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/usbobex.h     MW_LAYER_PLATFORM_EXPORT_PATH(usbobex.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/btservices_plat/usb_obexservicemanager_client_api/inc/usbobex.h	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2006-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:  USB obexservicemanager client definition
+*
+*/
+
+
+#ifndef USBOBEX_H
+#define USBOBEX_H
+
+#include <e32base.h>
+
+
+class CUSBClientWrapper;
+
+
+/**
+*	Transportation string definition
+*/
+_LIT8(KSrcsTransportBT,"OBEX/BT");
+_LIT8(KSrcsTransportUSB,"OBEX/USB");
+_LIT8(KSrcsTransportIrDA,"OBEX/IrDA");
+
+
+/**
+ *  obexservicemanager client for usb.
+ *  @lib obexusbapi.lib
+ *  @since S60 v3.2
+ */
+class CObexUSB : public CBase
+    {
+public:
+
+   /**
+    * Two-phased constructor.    
+    */
+    IMPORT_C static CObexUSB* NewL();
+        
+   /**
+    * Destructor.
+    */
+    ~CObexUSB();
+    
+   /**
+    * Turn USB services on or off
+    *
+    * @since S60 v3.2
+    * @param aUSBStatus the requested USB service status
+    * @param aStatus the Request status
+    * @return None
+    */
+    IMPORT_C void  ManageUSBServices( TBool aUSBStatus, TRequestStatus &aStatus );     
+      
+   /**
+    * Cancel managment request and turn services off   
+    * @since S60 v3.2
+    *
+    */
+    IMPORT_C void  CancelManageUSBServices();     
+
+private: 
+
+    CObexUSB();
+    void ConstructL();
+
+private: //data
+
+   /**
+    * Obexserviceman client wrapper
+    */
+    CUSBClientWrapper* iUSBWrapper;        
+    };
+#endif // USBOBEX_H
--- a/cbsatplugin/atmisccmdplugin/data/2002C3BA.rss	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/data/2002C3BA.rss	Fri May 28 17:03:06 2010 +0300
@@ -31,7 +31,7 @@
 	                implementation_uid = 0x2002DC6B;// KUidATMiscCmdEcomImpl;
 	                version_no = 1;
 	                display_name = "Miscellaneous AT commands Implementation";
-	                default_data = "MAT+CLCK|MAT+CPWD|MAT+CUSD|MAT+CPIN|MAT+CNUM|MAT+CFUN|MAT+CBC";
+	                default_data = "MAT+CLCK|MAT+CPWD|MAT+CUSD|MAT+CPIN|MAT+CNUM|MAT+CFUN|MAT+CBC|OAT+CMEE";
 	                opaque_data = "";
 	                }
 				};
--- a/cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp	Fri May 28 17:03:06 2010 +0300
@@ -26,7 +26,8 @@
 SOURCEPATH      ../src
 SOURCE          main.cpp
 SOURCE          atmisccmdplugin.cpp 
-SOURCE          atmisccmdpluginbase.cpp 
+SOURCE          atcmdasyncbase.cpp
+SOURCE          atcmdsyncbase.cpp  
 SOURCE          atcommandparser.cpp
 SOURCE          clckcommandhandler.cpp 
 SOURCE          securitycodeverifier.cpp
@@ -38,7 +39,9 @@
 SOURCE          cnumcommandhandler.cpp
 SOURCE          cfuncommandhandler.cpp 
 SOURCE          cbccommandhandler.cpp
-SOURCE          cusdreadwriteimp.cpp
+SOURCE          ussdreadmessageimpl.cpp
+SOURCE          ussdsendmessageimpl.cpp
+
 
 USERINCLUDE     ../inc
 
@@ -59,6 +62,11 @@
 LIBRARY         ProfileEng.lib
 LIBRARY         StarterClient.lib 
 
-DEBUGLIBRARY    flogger.lib
+LIBRARY			etel3rdparty.lib
+LIBRARY			sysutil.lib 
 
+LIBRARY		    flogger.lib
+
+MACRO _DEBUG
+MACRO USE_FILE_LOGGING
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/atcmdasyncbase.h	Fri May 28 17:03:06 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:  Base class for async commands
+*
+*/
+
+#ifndef ATCMDASYNCBASE_H
+#define ATCMDASYNCBASE_H
+
+#include <e32base.h>
+#include <etelmm.h>
+#include "atcommandparser.h"
+#include "atcmdbase.h"
+#include "atmisccmdplugin.h"
+
+/**
+ *  Abstract base class for async AT command handler interface.
+ *  It can not be instantiated individually as it doesn't fully
+ *  implement MATCmdBase.
+ *  
+ */
+NONSHARABLE_CLASS( CATCmdAsyncBase ) : public CActive,
+                                      public MATCmdBase
+    {
+public:
+    virtual ~CATCmdAsyncBase() {};
+    CATCmdAsyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
+
+    // From MATCmdBase
+    virtual void HandleCommandCancel();
+      
+protected:
+    MATMiscCmdPlugin* iCallback;
+    TAtCommandParser& iATCmdParser;
+    RMobilePhone& iPhone;
+    };
+
+#endif // ATCMDASYNCBASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/atcmdbase.h	Fri May 28 17:03:06 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:  Interface class for AT Commands
+*
+*/
+
+#ifndef ATCMDBASE_H_
+#define ATCMDBASE_H_
+
+/**
+ *  Class for accessing AT command common functionality
+ */
+NONSHARABLE_CLASS( MATCmdBase )
+    {
+public:
+    /**
+     * @see CATExtPluginBase::HandleCommand
+     */
+    virtual void HandleCommand( const TDesC8& aCmd,
+                                RBuf8& aReply,
+                                TBool aReplyNeeded ) = 0;
+
+    /**
+     * @see CATExtPluginBase::HandleCommandCancel
+     */
+    virtual void HandleCommandCancel() = 0;
+    };
+
+#endif /* ATCMDBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/atcmdsyncbase.h	Fri May 28 17:03:06 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:  Base class for sync commands. 
+*               
+*/
+
+#ifndef ATCMDSYNCBASE_H
+#define ATCMDSYNCBASE_H
+
+#include <e32base.h>
+#include <etelmm.h>
+#include "atcommandparser.h"
+#include "atcmdbase.h"
+#include "atmisccmdplugin.h"
+
+/**
+ *  Abstract base class for sync AT command handler interface.
+ *  It can not be instantiated individually as it doesn't fully
+ *  implement MATCmdBase.
+ */
+NONSHARABLE_CLASS( CATCmdSyncBase ) : public CBase,
+                                      public MATCmdBase
+    {
+public:
+    virtual ~CATCmdSyncBase() {};
+    CATCmdSyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
+
+    // From MATCmdBase
+    virtual void HandleCommandCancel();
+    
+protected:
+    MATMiscCmdPlugin* iCallback;
+    TAtCommandParser& iATCmdParser;
+    RMobilePhone& iPhone;
+    };
+
+#endif // ATCMDSYNCBASE_H
--- a/cbsatplugin/atmisccmdplugin/inc/atcommandparser.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/atcommandparser.h	Fri May 28 17:03:06 2010 +0300
@@ -52,7 +52,8 @@
         ECmdAtCpwd,
         ECmdAtCpin,
         ECmdAtCusd,
-        ECmdAtCnum
+        ECmdAtCnum,
+        ECmdAtCmee
         };
 public:
     TAtCommandParser();
@@ -96,10 +97,10 @@
      * This function validate the parameter is a valid string.
      * if the parameter is absent, it returns KErrNotFound.
      * if the parameter is an invalid string such as not in a pair of double quotes, it returns KErrArgument
-     * @param aError return the error code. 
-     * @return Next text parameter when aError is not KErrNone; 
+     * @param aParam the text string without quotes
+     * @return  Symbian system wide error codes
      */
-    TPtrC8 NextTextParam(TInt& aError);
+    TInt NextTextParam(TPtrC8& aParam);
 
     /**
      * Get ISA hash code for security code
--- a/cbsatplugin/atmisccmdplugin/inc/atmisccmdplugin.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/atmisccmdplugin.h	Fri May 28 17:03:06 2010 +0300
@@ -23,6 +23,10 @@
 
 #include "atcommandparser.h"
 
+class MATCmdBase;
+class CATCmdAsyncBase;
+class CATCmdSyncBase;
+
 /** Character types: carriage return, line feed or backspace */
 enum TCharacterTypes
     {
@@ -39,36 +43,6 @@
     };
 
 
-class MATMiscCmdPlugin;
-
-
-/**
- *  Class for common AT command handler interface
- */
-NONSHARABLE_CLASS( CATCmdAsyncBase ) : public CActive 
-    {
-public:
-    virtual ~CATCmdAsyncBase() {};
-    CATCmdAsyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
-
-    /**
-     * @see CATExtPluginBase::HandleCommand
-     */
-    virtual void HandleCommand( const TDesC8& aCmd,
-                                RBuf8& aReply,
-                                TBool aReplyNeeded ) = 0;
-
-    /**
-     * @see CATExtPluginBase::HandleCommandCancel
-     */
-    virtual void HandleCommandCancel() = 0;
-
-protected:
-    MATMiscCmdPlugin* iCallback;
-    TAtCommandParser& iATCmdParser;
-    RMobilePhone& iPhone;
-    };
-
 /**
  *  Class for accessing plugin information and common functionality
  */
@@ -173,6 +147,7 @@
     void ConstructL();
     
     TInt CreatePartOfReply( RBuf8& aBuffer );
+    void HandleCMEECommand();
     
     /*
      * Utility function that connect to Etel server and establish a subsession to RMobilePhone
@@ -191,12 +166,12 @@
      * Current AT command handler in.
      * Used when IsCommandSupported() detects a matching handler class.
      */
-    CATCmdAsyncBase* iCurrentHandler;
+    MATCmdBase* iCurrentHandler;
     
     CATCmdAsyncBase* iCLCKHandler;
     CATCmdAsyncBase* iCPWDHandler;
     CATCmdAsyncBase* iCPINHandler;
-    CATCmdAsyncBase* iCUSDHandler;
+    CATCmdSyncBase* iCUSDHandler;
     CATCmdAsyncBase* iCNUMHandler;
     CATCmdAsyncBase* iCFUNHandler;
     CATCmdAsyncBase* iCBCHandler;
@@ -217,6 +192,11 @@
      * Global reply buffer for the AT command replies
      */
     RBuf8 iReplyBuffer;
+    
+    /**
+     * +CME error level
+     */
+    TInt iErrorLevel;
     };
 
 #endif  // ATMISCCMDPLUGIN_H
--- a/cbsatplugin/atmisccmdplugin/inc/atmisccmdpluginconsts.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/atmisccmdpluginconsts.h	Fri May 28 17:03:06 2010 +0300
@@ -31,7 +31,6 @@
 _LIT8(KCBCSupportedCmdsList, "+CBC: (0,1,2,3),(1...100)\r\n\r\nOK\r\n");
 _LIT8(KCUSDSupportedCmdsList, "+CUSD: (0,1)\r\n\r\nOK\r\n");
 
-
 _LIT8(KATCLCKPS, "PS");
 _LIT8(KATCLCKSC, "SC");
 _LIT8(KATCLCKAO, "AO");
@@ -43,4 +42,7 @@
 _LIT8(KATCLCKAG, "AG");
 _LIT8(KATCLCKAC, "AC");
 
+// Max buffer length for an MD5 digest - originally defined in SCPServerInterface.h
+const TInt KSCPMaxHashLength( 32 );
+
 #endif // ATMISCCMDPLUGINCONSTS_H
--- a/cbsatplugin/atmisccmdplugin/inc/cbccommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cbccommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -19,7 +19,7 @@
 #ifndef CBCCOMMANDHANDLER_H
 #define CBCCOMMANDHANDLER_H
 
-#include "atmisccmdplugin.h"
+#include "atcmdasyncbase.h"
 
 /**
  *  AT+CBC command handler implementation class
@@ -35,9 +35,8 @@
     virtual void DoCancel();
     // RunError not needed as RunL does not leave
 
-private: // methods from CATCmdAsyncBase    
+private: // method from CATCmdAsyncBase::MATCmdBase    
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    virtual void HandleCommandCancel();
     
 private:
     CCBCCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
--- a/cbsatplugin/atmisccmdplugin/inc/cfuncommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cfuncommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -19,7 +19,9 @@
 #ifndef CFUNCOMMANDHANDLER_H
 #define CFUNCOMMANDHANDLER_H
 
-#include "atmisccmdplugin.h"
+#include <e32property.h> 
+
+#include "atcmdasyncbase.h"
 
 const TInt KGeneralProfileId = 0;
 const TInt KOfflineProfileId = 5;
@@ -39,16 +41,15 @@
     virtual void RunL();
     virtual void DoCancel();
     // RunError not needed as RunL does not leave
-
-private: // methods from CATCmdAsyncBase    
+    
+private: // method from CATCmdAsyncBase::MATCmdBase    
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    virtual void HandleCommandCancel();
     
 private:
     CCFUNCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     void ConstructL();
     
-    TInt ActivateProfile(TInt aFunc, TInt aReset);
+    TInt ActivateProfile(TInt aFunc);
     TInt SetActiveProfile(TInt aProfileId);
     TInt RestartDevice();
     
@@ -56,6 +57,9 @@
     RBuf8 iReply;
     
     MProfileEngine* iProfileEngine;
+    RProperty iProperty;
+    TInt iExpectedState;
+    TInt iReset; // default 0 - do not reset the MT before setting it to <fun> power level
     };
 
 #endif /* CFUNCOMMANDHANDLER_H */
--- a/cbsatplugin/atmisccmdplugin/inc/clckcommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/clckcommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -18,7 +18,7 @@
 
 #include <mmretrieve.h>
 
-#include "atmisccmdplugin.h"
+#include "atcmdasyncbase.h"
 
 class CSecurityCodeVerifier;
 class CSecurityEventHandler;
@@ -84,10 +84,9 @@
     virtual void DoCancel();
     // RunError not needed as RunL does not leave
 
-private: // methods from CATCmdAsyncBase    
+private: // method from CATCmdAsyncBase::MATCmdBase    
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    virtual void HandleCommandCancel();
-    
+   
 private:
     CCLCKCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     void ConstructL();
--- a/cbsatplugin/atmisccmdplugin/inc/cnumcommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cnumcommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -16,7 +16,7 @@
 #ifndef CNUMCOMMANDHANDLER_H
 #define CNUMCOMMANDHANDLER_H
 
-#include "atmisccmdplugin.h"
+#include "atcmdasyncbase.h"
 
 /**
  *  This class implements an AO for AT+CPIN command using ATExt plugin framework.
@@ -37,15 +37,8 @@
     virtual void DoCancel();
     // RunError is not required because RunL doesn't leave.
 
-    // inherited from CATCmdAsyncBase
-    /**
-     *  @see CATCmdAsyncBase::HandleCommand
-     */
+    // method from CATCmdAsyncBase::MATCmdBase
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    /**
-     *  @see CATCmdAsyncBase::HandleCommandCancel
-     */
-    virtual void HandleCommandCancel();
 
     CCNUMCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser,
                        RMobilePhone& aPhone, RTelServer& aTelServer);
--- a/cbsatplugin/atmisccmdplugin/inc/cpincommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cpincommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -16,7 +16,7 @@
 #ifndef CPINCOMMANDHANDLER_H
 #define CPINCOMMANDHANDLER_H
 
-#include "atmisccmdplugin.h"
+#include "atcmdasyncbase.h"
 
 /**
  *  This class implements an AO for AT+CPIN command using ATExt plugin framework.
@@ -36,14 +36,8 @@
     virtual void DoCancel();
     // RunError is not required because RunL doesn't leave.
 
-    /**
-     *  @see CATCmdAsyncBase::HandleCommand
-     */
+    // method from CATCmdAsyncBase::MATCmdBase
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    /**
-     *  @see CATCmdAsyncBase::HandleCommandCancel
-     */
-    virtual void HandleCommandCancel();
 
     CCPINCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     void ConstructL();
--- a/cbsatplugin/atmisccmdplugin/inc/cpwdcommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cpwdcommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -19,7 +19,7 @@
 #include <e32base.h>
 #include <etelmm.h>
 
-#include "atmisccmdplugin.h"
+#include "atcmdasyncbase.h"
 
 /**
  *  This class implements an AO for AT+CPWD command using ATExt plugin framework.
@@ -39,14 +39,8 @@
     virtual void DoCancel();
     // RunError is not required because RunL doesn't leave.
     
-    /**
-     * @see CATCmdAsyncBase::HandleCommand
-     */
+    // method from CATCmdAsyncBase::MATCmdBase
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
-    /**
-     * @see CATCmdAsyncBase::HandleCommandCancel
-     */
-    virtual void HandleCommandCancel();
     
     CCPWDCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     void ConstructL();
--- a/cbsatplugin/atmisccmdplugin/inc/cusdcommandhandler.h	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/inc/cusdcommandhandler.h	Fri May 28 17:03:06 2010 +0300
@@ -20,10 +20,10 @@
 #include <mmretrieve.h>
 #include <gsmuelem.h>
 
-#include "atmisccmdplugin.h"
+#include "atcmdsyncbase.h"
 
-class CCUSSDSendMessageImpl;
-class CCUSSDReadMessageImpl;
+class CUSSDSendMessageImpl;
+class CUSSDReadMessageImpl;
 /**
  *  Class for accessing plugin information and common functionality
  */
@@ -31,34 +31,31 @@
     {
 public:
     /**
-     * Creates an AT command reply based on the reply type and completes the
-     * request to ATEXT.
+     * Callback method for handling received USSD messages
+     * @param aError - the result code from the read operation
      */
-    virtual void HandleReadMessageComplete(TInt aResult) = 0;
+    virtual void HandleReadMessageComplete(TInt aError) = 0;
 
     /**
-      * Creates an AT command reply based on the reply type and completes the
-      * request to ATEXT.
+      * Callback method for handling sent USSD messages
+      * @param aError - the result code from the send operation
       */
-    virtual void HandleSendMessageComplete(TInt aResult) = 0;
+    virtual void HandleSendMessageComplete(TInt aError) = 0;
     };
 
-
-NONSHARABLE_CLASS( CCUSDCommandHandler ) : public CATCmdAsyncBase,
+/**
+ *  Class for handling USSD requests
+ */
+NONSHARABLE_CLASS( CCUSDCommandHandler ) : public CATCmdSyncBase,
                                            public MUSSDCallback
 {
 public:
     static CCUSDCommandHandler* NewL(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     ~CCUSDCommandHandler();
-    
-private: // methods from CActive
-    virtual void RunL();
-    virtual void DoCancel();
-    // RunError not needed as RunL does not leave
- 
+     
 private: // methods from MUSSDCallback
-    virtual void HandleSendMessageComplete(TInt aResult);
-    virtual void HandleReadMessageComplete(TInt aResult);
+    virtual void HandleSendMessageComplete(TInt aError);
+    virtual void HandleReadMessageComplete(TInt aError);
     
 private: // methods from CATCmdAsyncBase    
     virtual void HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded );
@@ -68,7 +65,7 @@
     CCUSDCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone);
     void ConstructL();
     
-    TInt ParseCUSDCmd(const TDesC8& aCmd);
+    TInt ParseCUSDCmd();
     void CCUSDCommandHandler::FindFirstCarriageReturnL( 
          const TDesC& aBuffer ,
          TUint& aSkipChars , 
@@ -86,11 +83,11 @@
 
     RMobileUssdMessaging iUssdMessaging;
 
-    CCUSSDSendMessageImpl* iUSSDSender;
+    CUSSDSendMessageImpl* iUSSDSender;
     RMobileUssdMessaging::TMobileUssdAttributesV1 iSendAttributes;
     RBuf8 iUSSDCommand;
 
-    CCUSSDReadMessageImpl* iUSSDReader;
+    CUSSDReadMessageImpl* iUSSDReader;
     RMobileUssdMessaging::TGsmUssdMessageData iReceivedData;
     TInt iDisplayRetMessage;
     RMobileUssdMessaging::TMobileUssdAttributesV1 iReceiveAttributes;
--- a/cbsatplugin/atmisccmdplugin/inc/cusdreadwriteimp.h	Mon May 17 11:06:23 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/* 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 CUSDREADWRITEIMP_H
-#define CUSDREADWRITEIMP_H
-
-#include <e32base.h>
-#include <etelmm.h>
-
-class MUSSDCallback;
-
-NONSHARABLE_CLASS( CCUSSDReadMessageImpl ) : public CActive
-{
-public:
-    static CCUSSDReadMessageImpl* NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession);
-    ~CCUSSDReadMessageImpl();
-
-    TInt ReadUSSDMessage(TDes8& aReceivedData, 
-                               RMobileUssdMessaging::TMobileUssdAttributesV1& aUSDAttribute );
-
-private: // methods from CActive
-    virtual void RunL();
-    virtual void DoCancel();
-    // RunError not needed as RunL does not leave
-
-private:
-    CCUSSDReadMessageImpl(MUSSDCallback* aCallback, 
-                          RMobileUssdMessaging& aUSSDMessagingSession);
-private:
-    MUSSDCallback* iCallback;
-    RMobileUssdMessaging& iUssdSession;
-    };
-
-NONSHARABLE_CLASS( CCUSSDSendMessageImpl ) : public CActive
-{
-public:
-     static CCUSSDSendMessageImpl* NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession);
-     ~CCUSSDSendMessageImpl();
-
-    TInt HandleSendUSSDCmd(const TDesC8& aCmd, 
-                           RMobileUssdMessaging::TMobileUssdAttributesV1& aUSDAttribute);
-
-private: // methods from CActive
-    virtual void RunL();
-    virtual void DoCancel();
-    // RunError not needed as RunL does not leave
-    
-private:
-    CCUSSDSendMessageImpl(MUSSDCallback* aCallback, 
-                          RMobileUssdMessaging& aUSSDMessagingSession);
-
-private:
-    MUSSDCallback* iCallback;        
-    RMobileUssdMessaging& iUssdSession;
-    };
-
-#endif // CUSDREADWRITEIMP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/ussdreadmessageimpl.h	Fri May 28 17:03:06 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 :
+ *
+ */
+
+#ifndef USSDREADMESSAGEIMPL_H
+#define USSDREADMESSAGEIMPL_H
+
+#include <etelmm.h>
+
+class MUSSDCallback;
+
+/**
+ *  Class for receiving USSD data
+ */
+NONSHARABLE_CLASS( CUSSDReadMessageImpl ) : public CActive
+{
+public:
+    static CUSSDReadMessageImpl* NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession);
+    ~CUSSDReadMessageImpl();
+
+    TInt ReadUSSDMessage(TDes8& aReceivedData, 
+                               RMobileUssdMessaging::TMobileUssdAttributesV1& aUSDAttribute );
+
+private: // methods from CActive
+    virtual void RunL();
+    virtual void DoCancel();
+    // RunError not needed as RunL does not leave
+
+private:
+    CUSSDReadMessageImpl(MUSSDCallback* aCallback, 
+                          RMobileUssdMessaging& aUSSDMessagingSession);
+private:
+    MUSSDCallback* iCallback;
+    RMobileUssdMessaging& iUssdSession;
+    };
+
+#endif /* USSDREADMESSAGEIMPL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/ussdsendmessageimpl.h	Fri May 28 17:03:06 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 :
+ *
+ */
+
+#ifndef USSDSENDMESSAGEIMPL_H
+#define USSDSENDMESSAGEIMPL_H
+
+#include <etelmm.h>
+
+class MUSSDCallback;
+
+/**
+ *  Class for sending USSD data
+ */
+NONSHARABLE_CLASS( CUSSDSendMessageImpl ) : public CActive
+{
+public:
+     static CUSSDSendMessageImpl* NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession);
+     ~CUSSDSendMessageImpl();
+
+    TInt SendUSSDCmd(const TDesC8& aCmd, 
+                     RMobileUssdMessaging::TMobileUssdAttributesV1& aUSDAttribute);
+
+private: // methods from CActive
+    virtual void RunL();
+    virtual void DoCancel();
+    // RunError not needed as RunL does not leave
+    
+private:
+    CUSSDSendMessageImpl(MUSSDCallback* aCallback, 
+                          RMobileUssdMessaging& aUSSDMessagingSession);
+
+private:
+    MUSSDCallback* iCallback;        
+    RMobileUssdMessaging& iUssdSession;
+    };
+
+#endif /* USSDSENDMESSAGEIMPL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/src/atcmdasyncbase.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* 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:  Main handler for incoming requests
+*
+*/
+
+#include "atcmdasyncbase.h"
+
+#include "debug.h"
+
+
+CATCmdAsyncBase::CATCmdAsyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) :
+    CActive(CActive::EPriorityStandard),
+    iATCmdParser(aATCmdParser),
+    iPhone(aPhone)
+    {
+    TRACE_FUNC_ENTRY
+    iCallback = aCallback;
+    CActiveScheduler::Add(this);
+    TRACE_FUNC_EXIT
+    }
+
+void CATCmdAsyncBase::HandleCommandCancel()
+    {
+    TRACE_FUNC_ENTRY
+    Cancel();
+    TRACE_FUNC_EXIT
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/src/atcmdsyncbase.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* 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:  Main handler for incoming requests that don't require async operation.
+*
+*/
+
+#include "atcmdsyncbase.h"
+
+#include "debug.h"
+
+
+CATCmdSyncBase::CATCmdSyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) :
+    iATCmdParser(aATCmdParser),
+    iPhone(aPhone)
+    {
+    TRACE_FUNC_ENTRY
+    iCallback = aCallback;
+    TRACE_FUNC_EXIT
+    }
+
+void CATCmdSyncBase::HandleCommandCancel()
+    {
+    TRACE_FUNC_ENTRY
+    TRACE_FUNC_EXIT
+    }
--- a/cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp	Fri May 28 17:03:06 2010 +0300
@@ -19,24 +19,23 @@
 #include <hash.h>
 
 #include "debug.h"
-
-
-// Max buffer length for an MD5 digest
-const TInt KSCPMaxHashLength( 32 );
-
+#include "atmisccmdpluginconsts.h"
 
 TAtCommandParser::TAtCommandParser()
     : iCmdType(EUnknown), iCmdHandlerType(ECmdHandlerTypeUndefined)  
     {
+    TRACE_FUNC_ENTRY
+    TRACE_FUNC_EXIT
     }
 
 TAtCommandParser::TAtCommandParser(const TDesC8& aCmd)
     : iCmdType(EUnknown), iCmdHandlerType(ECmdHandlerTypeUndefined)  
     {
+    TRACE_FUNC_ENTRY
     ParseAtCommand(aCmd);
+    TRACE_FUNC_EXIT
     }
 
-
 void TAtCommandParser::ParseAtCommand(const TDesC8& aCmd)
     {
     TRACE_FUNC_ENTRY
@@ -59,37 +58,42 @@
     _LIT8(KAtCpin, "AT+CPIN");
     _LIT8(KAtCusd, "AT+CUSD");
     _LIT8(KAtCnum, "AT+CNUM");
+    _LIT8(KAtCmee, "AT+CMEE");
     
     Trace(KDebugPrintS, "token: ", &token);
     // Determine the AT command type
-    if(!token.Compare(KAtCfun))
+    if(!token.CompareF(KAtCfun))
         {
         iCmdType = ECmdAtCfun;
         }
-    else if(!token.Compare(KAtCbc))
+    else if(!token.CompareF(KAtCbc))
         {
         iCmdType = ECmdAtCbc;
         }
-    else if(!token.Compare(KAtClck))
+    else if(!token.CompareF(KAtClck))
         {
         iCmdType = ECmdAtClck;
         }
-    else if(!token.Compare(KAtCpwd))
+    else if(!token.CompareF(KAtCpwd))
         {
         iCmdType = ECmdAtCpwd;
         }
-    else if(!token.Compare(KAtCpin))
+    else if(!token.CompareF(KAtCpin))
         {
         iCmdType = ECmdAtCpin;
         }
-    else if(!token.Compare(KAtCusd))
+    else if(!token.CompareF(KAtCusd))
         {
         iCmdType = ECmdAtCusd;
         }
-    else if(!token.Compare(KAtCnum))
+    else if(!token.CompareF(KAtCnum))
         {
         iCmdType = ECmdAtCnum;
         }
+    else if(!token.Compare(KAtCmee))
+        {
+        iCmdType = ECmdAtCmee;
+        }
     else
         {
         iCmdType = EUnknown;
@@ -128,11 +132,15 @@
 
 TAtCommandParser::TCommandType TAtCommandParser::Command() const
     {
+    TRACE_FUNC_ENTRY
+    TRACE_FUNC_EXIT
     return iCmdType;
     }
 
 TAtCommandParser::TCommandHandlerType TAtCommandParser::CommandHandlerType() const
     {
+    TRACE_FUNC_ENTRY
+    TRACE_FUNC_EXIT
     return iCmdHandlerType;
     }
 
@@ -166,25 +174,29 @@
     return retVal;
     }
 
-TPtrC8 TAtCommandParser::NextTextParam(TInt& aError)
+TInt TAtCommandParser::NextTextParam(TPtrC8& aParam)
     {
+    TRACE_FUNC_ENTRY
+    TInt ret = KErrNone;
     TPtrC8 param = NextParam();
     
-    if (param.Compare(KNullDesC8) == 0)
+    if (param.Length() == 0)
         {
-        aError = KErrNotFound;
-        return param; 
+        aParam.Set(NULL,0);
+        ret = KErrNotFound;
         }
-    
-    if(param.Length()<2 
-            || param[0] != '"'
+    else if(param.Length() < 2 || param[0] != '"'
             || param[param.Length()-1] != '"')
         {
-        aError = KErrArgument;
-        return param.Left(0);
+        aParam.Set(NULL,0);
+        ret = KErrArgument;
         }
-    aError = KErrNone;
-    return param.Mid(1, param.Length() - 2);
+    else
+        {
+        aParam.Set(param.Mid(1, param.Length() - 2));
+        }
+    TRACE_FUNC_EXIT
+    return ret;
     }
 
 TInt TAtCommandParser::NextIntParam(TInt& aValue)
@@ -192,7 +204,7 @@
     TRACE_FUNC_ENTRY
     TInt retVal =KErrNone;
     TPtrC8 param = NextParam();
-    if (param.Compare(KNullDesC8) == 0)
+    if (param.Length() == 0)
         {
         retVal = KErrNotFound;
         }
--- a/cbsatplugin/atmisccmdplugin/src/atmisccmdplugin.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/atmisccmdplugin.cpp	Fri May 28 17:03:06 2010 +0300
@@ -28,15 +28,14 @@
 #include "atmisccmdpluginconsts.h"
 #include "debug.h"
 
-#include <exterror.h>           // Additional RMobilePhone error code
-
+#include <EXTERROR.H>           // Additional RMobilePhone error code
 
 // +CME error code
-_LIT8(KCMEIncorrectPassword, "+CME: 16\r\n"); // Incorrect password.\r\n
-_LIT8(KCMEPUKRequired, "+CME: 12\r\n"); // PUK required.\r\n
-_LIT8(KCMENotAllowed, "+CME: 3\r\n"); // Operation not allowed.\r\n
-_LIT8(KCMEPhoneError, "+CME: 0\r\n"); // Phone failure.\r\n
-_LIT8(KCMEPhoneUnknown, "+CME: 100\r\n"); // unknown error
+_LIT8(KCMEIncorrectPassword, "+CME ERROR: 16\r\n"); // Incorrect password.\r\n
+_LIT8(KCMEPUKRequired, "+CME ERROR: 12\r\n"); // PUK required.\r\n
+_LIT8(KCMENotAllowed, "+CME ERROR: 3\r\n"); // Operation not allowed.\r\n
+_LIT8(KCMEPhoneError, "+CME ERROR: 0\r\n"); // Phone failure.\r\n
+_LIT8(KCMEPhoneUnknown, "+CME ERROR: 100\r\n"); // unknown error
 
 const TInt KErrorReplyLength = 9;  // CR+LF+"ERROR"+CR+LF
 
@@ -149,6 +148,11 @@
             iCurrentHandler = iCBCHandler;
             break;
             }
+        case (TAtCommandParser::ECmdAtCmee):
+            {
+            iCurrentHandler = NULL;
+            break;
+            }
         case (TAtCommandParser::EUnknown):
         default:
             {
@@ -170,10 +174,17 @@
 	{
 	TRACE_FUNC_ENTRY
 	
-	if (iCurrentHandler != NULL)
+	if(iCommandParser.Command() == TAtCommandParser::ECmdAtCmee)
+	    {
+        HandleCMEECommand();
+        HandleCommandCompleted( KErrNone, EReplyTypeOk);
+	    }
+	else if (iCurrentHandler != NULL)
 	    {
 	    iHcCmd = &aCmd;
 	    iHcReply = &aReply;
+	    // No need to parse the command again as assumed that
+	    // it is always called from CATMiscCmdPlugin::IsCommandSupported()
 	    iCurrentHandler->HandleCommand( aCmd, aReply, aReplyNeeded );
 	    }
 	TRACE_FUNC_EXIT
@@ -456,59 +467,94 @@
     {
     TRACE_FUNC_ENTRY
     
-    // TODO should return CME error according to CME state (and quiet mode?)
-    RBuf8 response;
-    response.Create(KDefaultCmdBufLength);
+    // currently only support +CME error level 0 and 1
+    ASSERT(iErrorLevel == 0 || iErrorLevel == 1 );
     
-    // log error code
-    response.AppendNum(aError);
-    Trace(KDebugPrintD, "complete with error ", &response);
+    // Log error code
+    Trace(KDebugPrintD, "complete with error ", aError);
     
-    // return error code to AT client
-    response.Zero(); // reuse RBuf
-    response.Append(KCRLF);
-    switch(aError)
+    if(iErrorLevel == 1 && !iQuietMode)
         {
-        case KErrGsm0707IncorrectPassword:
-        case KErrAccessDenied:
-            {    
-            // code was entered erroneously
-            response.Append(KCMEIncorrectPassword);
-            break;
-            }    
-        case KErrGsmSSPasswordAttemptsViolation:
-        case KErrLocked:
-            {
-            // Pin blocked 
-            response.Append(KCMEPUKRequired);
-            break;
-            }
-        case KErrGsm0707OperationNotAllowed:
+        // return error code to AT client
+        RBuf8 response;
+        response.Create(KDefaultCmdBufLength);
+        response.Append(KCRLF);
+        switch(aError)
             {
-            // not allowed with this sim
-            response.Append(KCMENotAllowed);
-            break;
+            case KErrGsm0707IncorrectPassword:
+            case KErrAccessDenied:
+                {    
+                // code was entered erroneously
+                response.Append(KCMEIncorrectPassword);
+                break;
+                }
+            case KErrGsmSSPasswordAttemptsViolation:
+            case KErrLocked:
+                {
+                // Pin blocked 
+                response.Append(KCMEPUKRequired);
+                break;
+                }
+            case KErrGsm0707OperationNotAllowed:
+                {
+                // not allowed with this sim
+                response.Append(KCMENotAllowed);
+                break;
+                }
+            case KErrUnknown:
+                {
+                // unknown error
+                response.Append(KCMEPhoneUnknown);
+                break;
+                }
+            default:
+                {
+                response.Append(KCMEPhoneError);
+                break;
+                }
             }
-        case KErrUnknown:
-            {
-            // unknown error
-            response.Append(KCMEPhoneUnknown);
-            break;
-            }
-        default:
-            response.Append(KCMEPhoneError);
+        CreateReplyAndComplete( EReplyTypeError, response );
+        response.Close();
         }
-    CreateReplyAndComplete( EReplyTypeError, response );
-    response.Close();
+    else
+        {
+        CreateReplyAndComplete( EReplyTypeError);
+        }
+
     TRACE_FUNC_EXIT
     }
 
-
 TInt CATMiscCmdPlugin::HandleUnsolicitedRequest(const TDesC8& aAT )
     {
+    TRACE_FUNC_ENTRY
+    TRACE_FUNC_EXIT
     return SendUnsolicitedResult(aAT);
     }
 
+void CATMiscCmdPlugin::HandleCMEECommand()
+    {
+    TRACE_FUNC_ENTRY
+    TAtCommandParser::TCommandHandlerType cmdHandlerType = iCommandParser.CommandHandlerType();
+    
+    if (cmdHandlerType == TAtCommandParser::ECmdHandlerTypeSet)
+        {
+        // +CMEE=n
+        TInt errLevel;
+        TInt ret = iCommandParser.NextIntParam(errLevel);
+        TPtrC8 param = iCommandParser.NextParam();
+        _LIT8(KCMEDbg, "CME : NextIntParam returned %d, NextParam Length is %d, errLevel %d\r\n");
+        Trace(KCMEDbg, ret, param.Length(), errLevel);
+        if (ret == KErrNone && param.Length() == 0 &&
+           (errLevel == 0 || errLevel == 1))
+            {
+            iErrorLevel = errLevel;
+            _LIT8(KCMEErrorLevel, "CME error level: %d\r\n");
+            Trace(KCMEErrorLevel, iErrorLevel);
+            }
+        }
+    TRACE_FUNC_EXIT
+    }
+
 void CATMiscCmdPlugin::ConnectToEtelL(RTelServer& aTelServer, RMobilePhone& aPhone)
     {
     TRACE_FUNC_ENTRY
@@ -521,9 +567,10 @@
     User::LeaveIfError(aTelServer.EnumeratePhones(phoneCount));  
     if (phoneCount < 1)
         {
-        User::Leave(KErrNotFound); // TODO: appropriate error code
+        User::Leave(KErrNotFound);
         }
     User::LeaveIfError(aTelServer.GetPhoneInfo(0, info));
     User::LeaveIfError(aPhone.Open(aTelServer, info.iName));
     TRACE_FUNC_EXIT
     }
+
--- a/cbsatplugin/atmisccmdplugin/src/atmisccmdpluginbase.cpp	Mon May 17 11:06:23 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* 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:  Main handler for incoming requests
-*
-*/
-
-#include "atmisccmdplugin.h"
-
-#include "debug.h"
-
-
-CATCmdAsyncBase::CATCmdAsyncBase(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) :
-    CActive(CActive::EPriorityStandard),
-    iATCmdParser(aATCmdParser),
-    iPhone(aPhone)
-    {
-    TRACE_FUNC_ENTRY
-    iCallback = aCallback;
-    CActiveScheduler::Add(this);
-    TRACE_FUNC_EXIT
-    }
-
--- a/cbsatplugin/atmisccmdplugin/src/cbccommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cbccommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -53,6 +53,7 @@
 
 void CCBCCommandHandler::HandleCommand(const TDesC8& /*aCmd*/, RBuf8& /*aReply*/, TBool /*aReplyNeeded*/)
     {
+    TRACE_FUNC_ENTRY
     iReply.Zero();
  
     TAtCommandParser::TCommandHandlerType cmdHandlerType = iATCmdParser.CommandHandlerType();
@@ -79,14 +80,6 @@
     TRACE_FUNC_EXIT
     }
 
-void CCBCCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
-
 void CCBCCommandHandler::RunL()
     {
     TRACE_FUNC_ENTRY
--- a/cbsatplugin/atmisccmdplugin/src/cbsettinghandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cbsettinghandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -61,7 +61,6 @@
         {
         iClassArray.Append(RMobilePhone::ETelephony);
         }
-   // TODO: confirm ECircuitDataService is not needed 
     if ((aInfoClass & EInfoClassData) == EInfoClassData)
         {
         iClassArray.Append(RMobilePhone::EAllBearer);
@@ -150,9 +149,11 @@
 
 void CCBSettingHandler::Complete(TInt aError)
     {
+    TRACE_FUNC_ENTRY
     if (iQueuedStatus != NULL)
         {
         User::RequestComplete(iQueuedStatus, aError);
         iQueuedStatus = NULL;
         }
+    TRACE_FUNC_EXIT
     }
--- a/cbsatplugin/atmisccmdplugin/src/cfuncommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cfuncommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -17,6 +17,7 @@
 
 #include <MProfileEngine.h>
 #include <starterclient.h>
+#include <ssm/startupdomainpskeys.h>
 
 #include <Profile.hrh>
 
@@ -53,6 +54,7 @@
     {
     TRACE_FUNC_ENTRY
     Cancel();
+    iProperty.Close();
     if (iProfileEngine != NULL)
         {
         iProfileEngine->Release();
@@ -62,6 +64,15 @@
 
 void CCFUNCommandHandler::HandleCommand(const TDesC8& /*aCmd*/, RBuf8& /*aReply*/, TBool /*aReplyNeeded*/)
     {
+    TRACE_FUNC_ENTRY
+    
+    if (IsActive())
+        {
+        iCallback->CreateReplyAndComplete(EReplyTypeError);
+        TRACE_FUNC_EXIT
+        return;
+        }
+    
     TInt ret = KErrNone;
     iReply.Zero();
     TAtCommandParser::TCommandHandlerType cmdHandlerType = iATCmdParser.CommandHandlerType();
@@ -94,8 +105,7 @@
         case (TAtCommandParser::ECmdHandlerTypeSet):
             {
             TInt func = 0;
-            TInt reset = 0; // default 0 - do not reset the MT before setting it to <fun> power level
-            
+
             ret = iATCmdParser.NextIntParam(func);
             if (ret != KErrNone && ret != KErrNotFound)
                 {
@@ -103,73 +113,136 @@
                 TRACE_FUNC_EXIT
                 return;
                 }
-            ret = iATCmdParser.NextIntParam(reset);
+			iReset = 0; // default 0 - do not reset the MT before setting it to <fun> power level
+            ret = iATCmdParser.NextIntParam(iReset);
             
             // second parameter is optional, but only 0 and 1 are valid if it is specified
-            if (ret != KErrNone && ret != KErrNotFound && (reset != 0 || reset != 1))
+            if (!(ret == KErrNone || ret == KErrNotFound) || !(iReset == 0 || iReset == 1))
                 {
                 iCallback->CreateReplyAndComplete(EReplyTypeError);
                 TRACE_FUNC_EXIT
                 return;
                 }
-            ret = ActivateProfile(func, reset);
-           
+            
+            ret = ActivateProfile(func);       
             break;
             }
         default:
             {
             iCallback->CreateReplyAndComplete(EReplyTypeError);
+            break;
             }
         }
     
-    if (ret != KErrNone)
+    if (!IsActive())
         {
-        iCallback->CreateReplyAndComplete(EReplyTypeError);
-        }
-    else
-        {
-        iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
+        if (ret != KErrNone)
+            {
+            iCallback->CreateReplyAndComplete(EReplyTypeError);
+            }
+        else
+            {
+            iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
+            }
         }
     TRACE_FUNC_EXIT
     }
 
-void CCFUNCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    // no asyc requests are made in when using AT+CFUN
-    TRACE_FUNC_EXIT
-    }
-
-
 void CCFUNCommandHandler::RunL()
     {
     TRACE_FUNC_ENTRY
-    // no asyc requests are made in when using AT+CFUN
+    TInt systemState;
+    
+    TInt ret = iProperty.Get(systemState);
+    if (ret != KErrNone)
+        {
+        if (systemState != iExpectedState)
+            {
+            iProperty.Subscribe(iStatus);
+            SetActive();
+            }
+        else if (iReset == 1)
+            {
+            ret = RestartDevice();
+            }
+        }
+    if (!IsActive())
+        {
+        if (ret != KErrNone)
+            {
+            iCallback->CreateReplyAndComplete(EReplyTypeError);
+            }
+        else
+            {
+            iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
+            }
+        }
     TRACE_FUNC_EXIT
     }
 
 void CCFUNCommandHandler::DoCancel()
     {
     TRACE_FUNC_ENTRY
-    // no asyc requests are made in when using AT+CFUN
+    iProperty.Cancel();
     TRACE_FUNC_EXIT
     }
 
-TInt CCFUNCommandHandler::ActivateProfile(TInt aFunc, TInt aReset)
+TInt CCFUNCommandHandler::ActivateProfile(TInt aFunc)
     {
-    TInt err = KErrNone;
+    TRACE_FUNC_ENTRY
+    TInt systemState;
+    
+    //Listen to the property KPSGlobalSystemState for profile change.
+    TInt err = iProperty.Attach(KPSUidStartup, KPSGlobalSystemState);
+    if (err != KErrNone)
+        {
+        TRACE_FUNC_EXIT
+        return err;
+        }
+
+    err = iProperty.Get(systemState);
+    if (err != KErrNone)
+        {
+        TRACE_FUNC_EXIT
+        return err;
+        }
     
     switch (aFunc)
         {
         case (0):
         case (4):
             {
-            err = SetActiveProfile(KOfflineProfileId);
+            // check of KPSGlobalSystemState is not already set to ESwStateNormalRfOff,
+            // issue the profile change request and start monitoring the property
+            if (systemState != ESwStateNormalRfOff)
+                {
+                err = SetActiveProfile(KOfflineProfileId);
+                
+                
+                if (err == KErrNone)
+                    {
+                    iExpectedState = ESwStateNormalRfOff;
+                    iProperty.Subscribe(iStatus);
+                    SetActive();
+                    }           
+                }
             break;
             }
         case (1):
             {
-            err = SetActiveProfile(KGeneralProfileId);
+            // check of KPSGlobalSystemState is not already set to ESwStateNormalRfOn,
+            // issue the profile change request and start monitoring the property
+            if (systemState != ESwStateNormalRfOn)
+                {
+                err = SetActiveProfile(KGeneralProfileId);
+                
+                if (err == KErrNone)
+                    {
+                    iExpectedState = ESwStateNormalRfOn;
+                    iProperty.Subscribe(iStatus);
+                    SetActive();
+                    }
+                }
             break;
             }
         default:
@@ -178,29 +251,26 @@
             break;
             }
         }
-    
-    if (err == KErrNone && aReset == 1)
-        {
-        err = RestartDevice();
-        }
-    
+    TRACE_FUNC_EXIT
     return err;
     }
 
 TInt CCFUNCommandHandler::SetActiveProfile(TInt aProfileId)
     {
+    TRACE_FUNC_ENTRY
     TInt err = KErrNone;
 
     if(iProfileEngine)
         {
         TRAP(err, iProfileEngine->SetActiveProfileL( aProfileId ));
         }
-
+    TRACE_FUNC_EXIT
     return err;
     }
 
 TInt CCFUNCommandHandler::RestartDevice()
     {
+    TRACE_FUNC_ENTRY
     RStarterSession session;
     TInt err = session.Connect();
 
@@ -209,6 +279,6 @@
         session.Reset(RStarterSession::EUnknownReset);
         session.Close();
         }
-
+    TRACE_FUNC_EXIT
     return err;
     }
--- a/cbsatplugin/atmisccmdplugin/src/clckcommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/clckcommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -25,8 +25,6 @@
 #include "atmisccmdpluginconsts.h"
 #include "debug.h"
 
-const TInt KSCPMaxHashLength( 32 );
-
 CCLCKCommandHandler* CCLCKCommandHandler::NewL(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone)
     {
     TRACE_FUNC_ENTRY
@@ -304,13 +302,6 @@
     return KErrNone;
     }
 
-void CCLCKCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
 void CCLCKCommandHandler::IssueCLCKCommand()
     {
     TRACE_FUNC_ENTRY
@@ -327,7 +318,7 @@
             }
         case (CCLCKCommandHandler::ECLCKLockSet):
             {
-            if (iPassword.Compare(KNullDesC8) == 0)
+            if (iPassword.Length() == 0)
                 {
                 iCallback->CreateReplyAndComplete( EReplyTypeError);
                 }
@@ -336,15 +327,14 @@
                 // Set the property to ignore security events in other clients
                 // it allows to avoid GUI promt for security code
                 TInt  ret = KErrNone;
-                // TODO: reenable when KIgnoreSecurityEvent propety definition is submitted to codeline
-//                if (iLockType == RMobilePhone::ELockICC)
-//                    {
-//                    ret = RProperty::Set(KPSUidStartup, KIgnoreSecurityEvent, EPSIgnoreSecurityEventEPin1Required);
-//                    }
-//                else
-//                    {
-//                    ret = RProperty::Set(KPSUidStartup, KIgnoreSecurityEvent, EPSIgnoreSecurityEventEPhonePasswordRequired);
-//                    }
+                if (iLockType == RMobilePhone::ELockICC)
+                    {
+                    ret = RProperty::Set(KPSUidStartup, KIgnoreSecurityEvent, EPSIgnoreSecurityEventEPin1Required);
+                    }
+                else
+                    {
+                    ret = RProperty::Set(KPSUidStartup, KIgnoreSecurityEvent, EPSIgnoreSecurityEventEPhonePasswordRequired);
+                    }
                 Trace(KDebugPrintD, "RProperty::Set: ", ret);
                 if (ret == KErrNone)
                     {
@@ -373,7 +363,7 @@
             }
         case (CCLCKCommandHandler::ECLCKBarringSet):
             {
-            if (iPassword.Compare(KNullDesC8) == 0)
+            if (iPassword.Length() == 0)
                 {
                 iCallback->CreateReplyAndComplete(EReplyTypeError);
                 }
@@ -546,98 +536,97 @@
 TInt CCLCKCommandHandler::ParseCCLCKCommand()
     {
     TRACE_FUNC_ENTRY
-    TCmdFacilityType facilityType = ECmdFacilityTypeUnknown;
-    TInt mode = 0;
-    TInt ret = KErrNone;
-
-    TPtrC8 command = iATCmdParser.NextTextParam(ret);
-    if (!command.Compare(KNullDesC8) || ret != KErrNone)
+    TPtrC8 command;
+    TInt ret = iATCmdParser.NextTextParam(command);
+    if (ret != KErrNone)
         {
         TRACE_FUNC_EXIT
         return KErrArgument;
         }
     
+    TInt mode = 0;
     ret = iATCmdParser.NextIntParam(mode);
-    if (!command.Compare(KNullDesC8) || ret != KErrNone)
+    if (ret != KErrNone)
         {
         TRACE_FUNC_EXIT
         return KErrArgument;
         }
     
-    iPassword.Create(iATCmdParser.NextTextParam(ret));
-    Trace(KDebugPrintD, "NextTextParam returned: ", ret);
+    TPtrC8 tmpPwd;
+    ret = iATCmdParser.NextTextParam(tmpPwd);
     if (ret != KErrNone && ret != KErrNotFound)
         {
         TRACE_FUNC_EXIT
         return KErrArgument;
         }
     
-    if (iPassword.Compare(KNullDesC8) != 0)
+    iPassword.Create(tmpPwd);
+    if (iPassword.Length() != 0)
         {
-        ret = iATCmdParser.NextIntParam(iInfoClass);
-        Trace(KDebugPrintD, "NextIntParam(iInfoClass): ", ret);
+        ret = iATCmdParser.NextIntParam(iInfoClass);;
         if (ret == KErrNotFound)
             {
-            iInfoClass = 7;
+            iInfoClass = 7; // Default value, see ETSI TS 127 007 V6.9.0 (2007-06)
             }
-        if ((ret != KErrNone && ret != KErrNotFound ) || 
-            iATCmdParser.NextParam().Compare(KNullDesC8) != 0)
+        else if (ret != KErrNone || iATCmdParser.NextParam().Length() != 0)
             {
             TRACE_FUNC_EXIT
             return KErrArgument;
             }
         }
     
-    if (command.Compare(KATCLCKPS) == 0)
+    TCmdFacilityType facilityType = ECmdFacilityTypeUnknown;
+    
+    if (command.CompareF(KATCLCKPS) == 0)
         {
         // Lock phone to SIM on/off
         iSecurityCode = RMobilePhone::ESecurityCodePhonePassword;
         iLockType = RMobilePhone::ELockPhoneToICC;
         facilityType = ECmdFacilityTypeLock;
         }
-    else if (command.Compare(KATCLCKSC) == 0)
+    else if (command.CompareF(KATCLCKSC) == 0)
         {
         // PIN on/off
         iSecurityCode = RMobilePhone::ESecurityCodePin1;
         iLockType = RMobilePhone::ELockICC;
         facilityType = ECmdFacilityTypeLock;
         }
-    else if (command.Compare(KATCLCKAO) == 0)
+    else if (command.CompareF(KATCLCKAO) == 0)
         {
         iCondition = RMobilePhone::EBarAllOutgoing;
         facilityType = ECmdFacilityTypeBarring;
         }
-    else if (command.Compare(KATCLCKOI) == 0)
+    else if (command.CompareF(KATCLCKOI) == 0)
         {
         iCondition = RMobilePhone::EBarOutgoingInternational;
         facilityType = ECmdFacilityTypeBarring;
         }
-    else if (command.Compare(KATCLCKOX) == 0)
+    else if (command.CompareF(KATCLCKOX) == 0)
         {
         iCondition = RMobilePhone::EBarOutgoingInternationalExHC;
         facilityType = ECmdFacilityTypeBarring;
         }
-    else if (command.Compare(KATCLCKAI) == 0)
+    else if (command.CompareF(KATCLCKAI) == 0)
         {
         iCondition = RMobilePhone::EBarAllIncoming;
         facilityType = ECmdFacilityTypeBarring;
         }
-    else if (command.Compare(KATCLCKIR) == 0)
+    else if (command.CompareF(KATCLCKIR) == 0)
         {
         iCondition = RMobilePhone::EBarIncomingRoaming;
         facilityType = ECmdFacilityTypeBarring;
         }
-    else if (command.Compare(KATCLCKAB) == 0)
+    else if (command.CompareF(KATCLCKAB) == 0)
         {
         iCondition = RMobilePhone::EBarAllCases;
         facilityType = ECmdFacilityTypeAllBarring;
         }
-    else if (command.Compare(KATCLCKAG) == 0)
+    else if (command.CompareF(KATCLCKAG) == 0)
         {
         iCondition = RMobilePhone::EBarAllOutgoingServices;
         facilityType = ECmdFacilityTypeAllBarring;
         }
-    else if (command.Compare(KATCLCKAC) == 0)
+    else if (command.CompareF(KATCLCKAC) == 0)
         {
         iCondition = RMobilePhone::EBarAllIncomingServices;
         facilityType = ECmdFacilityTypeAllBarring;
@@ -682,10 +671,6 @@
         case (ECmdFacilityTypeBarring):
             {
             iCBInfo.iPassword.Copy(iPassword);
-            if (iInfoClass == 0)
-                {
-                iInfoClass = 7; // Default value, see ETSI TS 127 007 V6.9.0 (2007-06)
-                }
             switch (mode)
                 {
                 case 0: // AT+CLCK="AO",0
--- a/cbsatplugin/atmisccmdplugin/src/cnumcommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cnumcommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -126,13 +126,6 @@
     TRACE_FUNC_EXIT
     }
 
-void CCNUMCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
 void CCNUMCommandHandler::RunL()
     {
     TRACE_FUNC_ENTRY
@@ -162,7 +155,7 @@
         {
         ASSERT(iPendingEvent == EMobilePhoneStoreRead);
         // step 5 append a phone number entry to the reply buffer
-        if(iOwnNumberEntry.iNumber.iTelNumber.Compare(KNullDesC) != 0)
+        if(iOwnNumberEntry.iNumber.iTelNumber.Length() != 0)
             {
             // 129 is the type of address octet in interger format
             _LIT8(KATNumReply, "\r\n+CNUM: ,\"%S\",129");
--- a/cbsatplugin/atmisccmdplugin/src/cpincommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cpincommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -18,7 +18,7 @@
 #include "cpincommandhandler.h"
 
 #include <mmretrieve.h>         // define AO wrapper
-#include <exterror.h>           // Additional RMobilePhone error code
+#include <EXTERROR.H>           // Additional RMobilePhone error code
 
 #include "debug.h"
 
@@ -82,48 +82,39 @@
     TRACE_FUNC_EXIT
     }
 
-void CCPINCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
 void CCPINCommandHandler::ChangePassword()
     {
     TRACE_FUNC_ENTRY
-    TRequestStatus status;
-
+    TPtrC8 pukCode8;
+    TPtrC8 pinCode8;
+    
     // Get parameters from AT command
-    TInt ret1;
-    TInt ret2; 
-    TPtrC8 pukCode8 = iATCmdParser.NextTextParam(ret1);
-    TPtrC8 pinCode8 = iATCmdParser.NextTextParam(ret2);
+    TInt ret1 = iATCmdParser.NextTextParam(pukCode8);
+    TInt ret2 = iATCmdParser.NextTextParam(pinCode8);
+    
     if(ret1 != KErrNone || ret2 != KErrNone
-            || iATCmdParser.NextParam().Compare(KNullDesC8) != 0)
+            || iATCmdParser.NextParam().Length() != 0)
         {
         iCallback->CreateReplyAndComplete( EReplyTypeError);
-        TRACE_FUNC_EXIT
-        return;
+        }
+    else
+        {
+        RMobilePhone::TMobilePassword pukCode;
+        RMobilePhone::TMobilePassword pinCode;
+        pukCode.Copy(pukCode8);
+        pinCode.Copy(pinCode8);
+        iPhone.VerifySecurityCode(iStatus, RMobilePhone::ESecurityCodePuk1, pinCode, pukCode);
+        // re-use the AO for VerifySecurityCode 
+        iPendingEvent = EMobilePhoneVerifySecurityCode; 
+        SetActive();
         }
     
-    RMobilePhone::TMobilePassword pukCode;
-    RMobilePhone::TMobilePassword pinCode;
-    pukCode.Copy(pukCode8);
-    pinCode.Copy(pinCode8);
-    iPhone.VerifySecurityCode(iStatus, RMobilePhone::ESecurityCodePuk1, pinCode, pukCode);
-    // re-use the AO for VerifySecurityCode 
-    iPendingEvent = EMobilePhoneVerifySecurityCode; 
-    SetActive();
-    
     TRACE_FUNC_EXIT
-    return;
     }
 
 void CCPINCommandHandler::RunL()
     {
     TRACE_FUNC_ENTRY
-
     if( iPendingEvent == EMobilePhoneGetLockInfo)
         { // after calling GetLockInfo
         HandleGetLockInfo();
--- a/cbsatplugin/atmisccmdplugin/src/cpwdcommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cpwdcommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -15,32 +15,25 @@
 // 
 //
 
-
-#include <mmretrieve.h>         // AO
-
 #include "cpwdcommandhandler.h"
 
+#include <mmretrieve.h> 
+
+#include "atmisccmdpluginconsts.h"
 #include "debug.h"
 
-
 // password types
 _LIT8(KATCPWDPS, "PS"); // Phone lock
 _LIT8(KATCPWDP2, "P2"); // PIN2
 _LIT8(KATCPWDSC, "SC"); // PIN
 _LIT8(KATCPWDAB, "AB"); // All Barring code
 
-
-
 // strings for debugging trace
 _LIT8(KDbgStr, "+CPWD: %s \r\n");
 _LIT8(KDbgTDes, "+CPWD: %s%S\r\n");
 
 // constant for Set All barring code service - originally defined in mw/PSetConstants.h
 const TInt KPsetAllSSServices = 0;
-// Max buffer length for an MD5 digest - originally defined in SCPServerInterface.h
-const TInt KSCPMaxHashLength( 32 );
-
-
 
 CCPWDCommandHandler* CCPWDCommandHandler::NewL(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone)
     {
@@ -94,28 +87,20 @@
     TRACE_FUNC_EXIT
     }
 
-void CCPWDCommandHandler::HandleCommandCancel()
-    {
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
-
 void CCPWDCommandHandler::ChangePassword()
     {
     TRACE_FUNC_ENTRY
 
     // Get parameters from AT command
-    TInt ret1;
-    TInt ret2; 
-    TInt ret3;
-    TPtrC8 passwordType = iATCmdParser.NextTextParam(ret1);
-    TPtrC8 oldPassword = iATCmdParser.NextTextParam(ret2);
-    TPtrC8 newPassword = iATCmdParser.NextTextParam(ret3);
+    TPtrC8 passwordType;
+    TPtrC8 oldPassword;
+    TPtrC8 newPassword;
+    TInt ret1 = iATCmdParser.NextTextParam(passwordType);
+    TInt ret2 = iATCmdParser.NextTextParam(oldPassword);
+    TInt ret3 = iATCmdParser.NextTextParam(newPassword);
     
     if(ret1 != KErrNone || ret2 != KErrNone || ret3 != KErrNone
-            || iATCmdParser.NextParam().Compare(KNullDesC8) != 0)
+            || iATCmdParser.NextParam().Length() != 0)
         {
         Trace(KDbgStr, "invalid arguments");
         iCallback->CreateReplyAndComplete( EReplyTypeError);
@@ -123,11 +108,11 @@
         return;
         }
     
-    if(passwordType.Compare(KATCPWDPS) == 0) // Phone lock
+    if(passwordType.CompareF(KATCPWDPS) == 0) // Phone lock
         {
-    // "PS" PH-SIM (lock PHone to SIM/UICC card) (MT asks password when other than current SIM/UICC card
-    // inserted; MT may remember certain amount of previously used cards thus not requiring password when they
-    // are inserted)
+        // "PS" PH-SIM (lock PHone to SIM/UICC card) (MT asks password when other than current SIM/UICC card
+        // inserted; MT may remember certain amount of previously used cards thus not requiring password when they
+        // are inserted)
         RMobilePhone::TMobilePhonePasswordChangeV1 passwordChange;
         
         // Phone lock password is hashed in RSPClient and NokiaTSY. See CSCPServer::HashISACode() for details.
@@ -138,7 +123,7 @@
 
         ChangeSecurityCode(RMobilePhone::ESecurityCodePhonePassword, hashOldPwd, hashNewPwd);
         }
-    else if(passwordType.Compare(KATCPWDSC) == 0) // SIM pin
+    else if(passwordType.CompareF(KATCPWDSC) == 0) // SIM pin
         {
         // "SC" SIM (lock SIM/UICC card) (SIM/UICC asks password in MT power-up and when this lock command
         // issued)
@@ -147,11 +132,11 @@
         // should check SIM Lock is on here and return an error if it is off.
         ChangeSecurityCode(RMobilePhone::ESecurityCodePin1, oldPassword, newPassword);
         }
-    else if(passwordType.Compare(KATCPWDP2) == 0) // SIM pin2
+    else if(passwordType.CompareF(KATCPWDP2) == 0) // SIM pin2
         {
         ChangeSecurityCode(RMobilePhone::ESecurityCodePin2, oldPassword, newPassword);
         }
-    else if(passwordType.Compare(KATCPWDAB) == 0) // All Barring services
+    else if(passwordType.CompareF(KATCPWDAB) == 0) // All Barring services
         {
         // "AB" All Barring services (refer 3GPP TS 22.030 [19]) (applicable only for <mode>=0)
         RMobilePhone::TMobilePhonePasswordChangeV2 passwordChange;
@@ -171,9 +156,7 @@
         Trace(KDbgTDes, "unknown password type:", &passwordType);
         iCallback->CreateCMEReplyAndComplete(KErrUnknown);
         }
-    
     TRACE_FUNC_EXIT
-    return;
     }
 
 void CCPWDCommandHandler::RunL()
@@ -203,10 +186,12 @@
 
 void CCPWDCommandHandler::ChangeSecurityCode(RMobilePhone::TMobilePhoneSecurityCode aType, TDesC8& aOldPassword, TDesC8& aNewPassword)
     {
+    TRACE_FUNC_ENTRY
     RMobilePhone::TMobilePhonePasswordChangeV1 passwordChange;
     passwordChange.iOldPassword.Copy(aOldPassword);
     passwordChange.iNewPassword.Copy(aNewPassword);
     iPhone.ChangeSecurityCode(iStatus, aType, passwordChange);
     iPendingEvent = EMobilePhoneChangeSecurityCode;
     SetActive();
+    TRACE_FUNC_EXIT
     }
--- a/cbsatplugin/atmisccmdplugin/src/cusdcommandhandler.cpp	Mon May 17 11:06:23 2010 +0300
+++ b/cbsatplugin/atmisccmdplugin/src/cusdcommandhandler.cpp	Fri May 28 17:03:06 2010 +0300
@@ -15,8 +15,10 @@
 
 #include <exterror.h> 
 
+#include "ussdreadmessageimpl.h"
+#include "ussdsendmessageimpl.h"
+
 #include "atmisccmdpluginconsts.h"
-#include "cusdreadwriteimp.h"
 #include "debug.h"
 
 const TUint8 KPhCltUssdCarriageReturn = 0x0d;
@@ -42,7 +44,7 @@
     }
 
 CCUSDCommandHandler::CCUSDCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) :
-    CATCmdAsyncBase(aCallback, aATCmdParser, aPhone)
+    CATCmdSyncBase(aCallback, aATCmdParser, aPhone)
     {
     TRACE_FUNC_ENTRY
     iSendAttributes.iDcs = KPhCltUssdDcsNotSet;  
@@ -54,10 +56,12 @@
 void CCUSDCommandHandler::ConstructL()
     {    
     TRACE_FUNC_ENTRY
+    iReply.CreateL(KDefaultCmdBufLength);
+
     User::LeaveIfError(iUssdMessaging.Open(iPhone));
     
-    iUSSDSender = CCUSSDSendMessageImpl::NewL(this, iUssdMessaging);
-    iUSSDReader = CCUSSDReadMessageImpl::NewL(this, iUssdMessaging);
+    iUSSDSender = CUSSDSendMessageImpl::NewL(this, iUssdMessaging);
+    iUSSDReader = CUSSDReadMessageImpl::NewL(this, iUssdMessaging);
     
     //start a read session for network based ussd requests
     User::LeaveIfError(iUSSDReader->ReadUSSDMessage(iReceivedData, iReceiveAttributes));
@@ -75,25 +79,18 @@
     TRACE_FUNC_EXIT
     }
 
-void CCUSDCommandHandler::DoCancel()
-    {
-    TRACE_FUNC_ENTRY
-    // This would never get called as the AO is never activated 
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSDCommandHandler::HandleCommand( const TDesC8& aCmd,
+void CCUSDCommandHandler::HandleCommand( const TDesC8& /*aCmd*/,
                                          RBuf8& /*aReply*/,
                                          TBool /*aReplyNeeded*/ )
     {
     TRACE_FUNC_ENTRY
     TAtCommandParser::TCommandHandlerType cmdHandlerType = iATCmdParser.CommandHandlerType();
-    
+    iReply.Zero();
+
     switch (cmdHandlerType)
         {
         case (TAtCommandParser::ECmdHandlerTypeTest):
             {
-            iReply.Create(KDefaultCmdBufLength);
             iReply.Append(KCRLF);
             iReply.Append(KCUSDSupportedCmdsList);
             iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
@@ -101,7 +98,6 @@
             }
         case (TAtCommandParser::ECmdHandlerTypeRead):
             {
-            iReply.Create(KDefaultCmdBufLength);
             iReply.Append(KCRLF);
             iReply.Append(KAtCUSD);
             iReply.AppendNum(iDisplayRetMessage);
@@ -112,28 +108,23 @@
             }
         case (TAtCommandParser::ECmdHandlerTypeSet):
             {         
-            if(ParseCUSDCmd(aCmd) == KErrNone)
+            if(ParseCUSDCmd() == KErrNone)
                {
                if(iUSSDCommand.Length() == 0)
                    {
                    Trace(KDebugPrintD, "No USSD command: ", iUSSDCommand.Length());
-
+                   
                    // the USSD command is not set then this is a set                   
-                   iReply.Create(KDefaultCmdBufLength);
-                   iReply.Append(KCRLF);
-                   iReply.Append(KAtCUSD);
-                   iReply.AppendNum(iDisplayRetMessage);
-                   iReply.Append(KCRLF);
-
-                   iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );                                     
+                   iReply.Append( KOKCRLF );
+                   iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply);
                    }
                 else
                     {
-                    if(iUSSDSender->HandleSendUSSDCmd(iUSSDCommand, iSendAttributes) == KErrNone)
+                    if(iUSSDSender->SendUSSDCmd(iUSSDCommand, iSendAttributes) == KErrNone)
                         {
                         iSendCommandSent = ETrue;
                         }
-                        else
+                    else
                         {
                         iCallback->CreateReplyAndComplete(EReplyTypeError);
                         }                 
@@ -155,121 +146,131 @@
     TRACE_FUNC_EXIT
     }
 
-void CCUSDCommandHandler::RunL()
-    {
-    TRACE_FUNC_ENTRY
-    // This would never get called as the AO is never activated 
-    TRACE_FUNC_EXIT
-    }
-
-
 void CCUSDCommandHandler::HandleCommandCancel()
     {
     TRACE_FUNC_ENTRY   
     iUSSDSender->Cancel();
+    iSendCommandSent = EFalse;
     TRACE_FUNC_EXIT
     }
 
-TInt CCUSDCommandHandler::ParseCUSDCmd(const TDesC8& aCmd)
+TInt CCUSDCommandHandler::ParseCUSDCmd()
     {
     TRACE_FUNC_ENTRY
     
-    iReply.Create(KDefaultCmdBufLength);
-    TBool tempRetMessage = EFalse;
-    TInt ret = iATCmdParser.NextIntParam(tempRetMessage);
-
-    if(ret == KErrNone)
+    TInt tempDispValue;
+    TInt ret = iATCmdParser.NextIntParam(tempDispValue);
+    
+    
+    if (ret == KErrNone && tempDispValue >= 0 && tempDispValue < 3)
         {
-        if(tempRetMessage < 0 || tempRetMessage > 2)
-            {
-            Trace(KDebugPrintD, "Display mode invalid: ", tempRetMessage);
-            TRACE_FUNC_EXIT
-            return KErrGeneral;       
-            }
-        else
-            {
-            iDisplayRetMessage = tempRetMessage;
-            }
+        Trace(KDebugPrintD, "tempDispValue: ", tempDispValue);
+        iDisplayRetMessage = tempDispValue;
+        }    
+    else if (ret != KErrNotFound)
+        {
+        Trace(KDebugPrintD, "First NextIntParam failed: ", ret);
+        TRACE_FUNC_EXIT
+        return KErrGeneral;       
         }
     
     // now parse the USSD command
-    TPtrC8 command = iATCmdParser.NextTextParam(ret);
-
-    if (ret == KErrNone)
+    TPtrC8 command;
+    ret = iATCmdParser.NextTextParam(command);
+    if (ret == KErrNone )
         {
         if(iUSSDCommand.Create(command.Length()) != KErrNone)
-           {
-            TRACE_FUNC_EXIT
-            return KErrGeneral;
-           }
-        
-        if(Pack(command, iUSSDCommand) < 0)
-           {
-           Trace(KDebugPrintS, "Pack() returned error, command: ", &command);
-           TRACE_FUNC_EXIT
-           return KErrGeneral;
-           }             
-        }
-   
-    TInt tempDcs = -1;    
-    ret = iATCmdParser.NextIntParam(tempDcs); 
-
-    if(ret == KErrNone)
-        {
-        if(!IsDcsValid(tempDcs))
             {
-            Trace(KDebugPrintD, "Invalid coding standard: ", tempDcs);
+            Trace(KDebugPrintD, "iUSSDCommand.Create() failed ", ret);
             TRACE_FUNC_EXIT
             return KErrGeneral;
             }
-        else
+    
+        Trace(KDebugPrintS, "command: ", &command);
+        if(Pack(command, iUSSDCommand) < 0)
             {
-            iSendAttributes.iDcs = tempDcs;
-            }
-        } 
+            Trace(KDebugPrintS, "Pack() returned error, command: ", &command);
+            TRACE_FUNC_EXIT
+            return KErrGeneral;
+            }    
+        }
+    else if (ret != KErrNotFound)
+        {
+        TRACE_FUNC_EXIT
+        return KErrGeneral;       
+        }
+    TInt dcs = 0; // 3GPP TS 23.038 [25] Cell Broadcast Data Coding Scheme in integer format (default 0)
+    ret = iATCmdParser.NextIntParam(dcs); 
+
+    Trace(KDebugPrintD, "ret: ", ret);
+    Trace(KDebugPrintD, "IsDcsValid(dcs): ", IsDcsValid(dcs));
+    Trace(KDebugPrintD, "iATCmdParser.NextParam().Length(): ", iATCmdParser.NextParam().Length());
+    if(ret != KErrNone && ret != KErrNotFound || !IsDcsValid(dcs) || 
+            iATCmdParser.NextParam().Length() != 0)
+        {
+        Trace(KDebugPrintD, "Second NextIntParam failed: ", ret);
+        TRACE_FUNC_EXIT
+        return KErrGeneral;       
+        }
+    else
+        {
+        // dcs will have the default value if no parameter is given in the command line
+        Trace(KDebugPrintD, "dcs ", dcs);   
+        iSendAttributes.iDcs = dcs;
+        }
+
     TRACE_FUNC_EXIT
     return KErrNone;
     }
 
-void CCUSDCommandHandler::HandleSendMessageComplete(TInt aResult)
+void CCUSDCommandHandler::HandleSendMessageComplete(TInt aError)
+    {
+    TRACE_FUNC_ENTRY
+    if (aError != KErrNone)
+        {
+        // Only respond from a Send USSD request if there has been an error
+        iCallback->CreateReplyAndComplete(EReplyTypeError);
+        }
+    else if (iDisplayRetMessage == 0)
+        {
+        // if display mode is 0 then no response apart from OK should be displayed
+        iCallback->CreateReplyAndComplete( EReplyTypeOther, KOKCRLF );
+        }
+   
+    iUSSDCommand.Close();
+    TRACE_FUNC_EXIT
+    }
+
+void CCUSDCommandHandler::HandleReadMessageComplete(TInt aError)
     {
     TRACE_FUNC_ENTRY
-    if(aResult == KErrNone)
+    if(aError == KErrNone)
         {
-        iReply.Create(KDefaultCmdBufLength);
-        iReply.Append(KCRLF);
-        iReply.Append(KAtCUSD);
-        iReply.Append(KCRLF);
-        iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );          
+        if(iDisplayRetMessage)
+            {
+            FormatUSSDReceivedData();
+            
+            if(iSendCommandSent)
+                {
+                iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
+                }
+             else
+                {       
+                iCallback->HandleUnsolicitedRequest(iReply);
+                }
+            }
+        
+        // as we have received the data initiated by the send USSD request we set
+        // this parameter to EFalse
+        iSendCommandSent = EFalse;
+    
+        // re-issue the read request
+        iUSSDReader->ReadUSSDMessage(iReceivedData, iReceiveAttributes);
         }
     else
         {
         iCallback->CreateReplyAndComplete(EReplyTypeError);
         }
-    
-    iSendCommandSent = EFalse;
-    iUSSDCommand.Close();
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSDCommandHandler::HandleReadMessageComplete(TInt aResult)
-    {
-    TRACE_FUNC_ENTRY
-    if(iDisplayRetMessage)
-        {
-        FormatUSSDReceivedData();
-        
-        if(iSendCommandSent)
-            {
-            iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply );
-            }
-         else
-            {       
-            iCallback->HandleUnsolicitedRequest(iReply);
-            }
-        }   
-    // re-issue the read request
-    iUSSDReader->ReadUSSDMessage(iReceivedData, iReceiveAttributes);
     TRACE_FUNC_EXIT
     }
 
@@ -280,7 +281,7 @@
     
     // Ensure we've got the right length
     TInt packedOctetsRequired = PackedOctetsRequired( aIn.Length() );
-    if ( packedOctetsRequired > ( aOut.MaxLength() - aOut.Length() ) )
+    if (packedOctetsRequired > ( aOut.MaxLength() - aOut.Length() ) )
         {
         Trace(KDebugPrintD, "packedOctetsRequired: ", packedOctetsRequired);
         TRACE_FUNC_EXIT
@@ -289,72 +290,84 @@
 
     // Do the conversion
     TInt elementSizeInBits = ElementSizeInBits(TSmsDataCodingScheme::ESmsAlphabet7Bit);
-    if ( elementSizeInBits == 8 ) // 8 bit data
+    
+    Trace(KDebugPrintD, "elementSizeInBits = : ", elementSizeInBits);
+    if (elementSizeInBits == 8) // 8 bit data
         {
         // Straight copy here
         aOut.Append( aIn );
         }
-        else if ( elementSizeInBits == 7 ) // Need packing to 7-bit
-            {
-            // Get raw pointers and do packing
-            TUint8* outPtr = ( TUint8* )aOut.Ptr() + aOut.Length();
-            const TUint8* inPtr = aIn.Ptr();
+    else if (elementSizeInBits == 7) // Need packing to 7-bit
+        {
+        Trace(KDebugPrintS, "aOut: ", &aOut);
+        Trace(KDebugPrintS, "aIn: ", &aIn);
+
+        // Get raw pointers and do packing
+        TUint8* outPtr = ( TUint8* )aOut.Ptr() + aOut.Length();
+        const TUint8* inPtr = aIn.Ptr();
     
-            outPtr[0] = 0;
-            for ( TInt i = 0; i < aIn.Length() ; ++i )
-                {
-                TUint8 to = inPtr[i];
-                *outPtr |= ( to << startBit );
-                if ( startBit )
+        TInt inLength = aIn.Length();
+        outPtr[0] = 0;
+        
+        Trace(KDebugPrintD, "inLength = : ", inLength);
+        for (TInt i = 0; i < inLength; ++i)
+           {
+           TUint8 to = inPtr[i];
+           *outPtr |= ( to << startBit );
+            
+           if (startBit)
+               {
+               ++outPtr;
+               *outPtr = ( TUint8 ) ( to >> ( 8 - startBit ) );
+               }
+
+           startBit = (startBit + 7) % 8; // roll 0,1,2,3,4,5,6,7,0,1,2,...
+           }
+       
+        Trace(KDebugPrintD, "startBit = : ", startBit);
+        
+        if ((inPtr[inLength - 1] == KPhCltUssdCarriageReturn && startBit == 0) || startBit == 1 )
+            {
+            //We have to add one CR more
+            *outPtr |= ( KPhCltUssdCarriageReturn << startBit );
+
+            if (startBit)
                 {
                 ++outPtr;
-                *outPtr = ( TUint8 ) ( to >> ( 8 - startBit ) );
+                *outPtr = (TUint8) (KPhCltUssdCarriageReturn >> (8 - startBit));
+                }
+            else
+                {
+                ++packedOctetsRequired;
                 }
-                startBit = ( startBit + 7 )%8; // roll 0,1,2,3,4,5,6,7,0,1,2,...
-             
-                if ( i == aIn.Length() - 1 ) // if this is the last time
-                    {
-                    if ( ( to == KPhCltUssdCarriageReturn && startBit == 0 ) || 
-                        startBit == 1 )
-                        {
-                    //We have to add one CR more
-                    *outPtr |= ( KPhCltUssdCarriageReturn << startBit );
-                    if ( startBit )
-                        {
-                        ++outPtr;
-                        *outPtr = ( TUint8 ) ( KPhCltUssdCarriageReturn >> ( 8 - startBit ) );
-                        }
-                    else
-                        {
-                        ++packedOctetsRequired;
-                        }
-                        startBit = ( startBit + 7 )%8;
-                        }
-                    }
-                }
-            // Increment the length for the packed data
-            aOut.SetLength( aOut.Length() + packedOctetsRequired );
+            startBit = (startBit + 7)%8;
             }
+        
+        // Increment the length for the packed data
+        aOut.SetLength(aOut.Length() + packedOctetsRequired);
+        
+        Trace(KDebugPrintD, "aOut.Length() = : ", aOut.Length());
+        }
 
     // Return number of bytes used
     TRACE_FUNC_EXIT
     return packedOctetsRequired;
     }
 
- TInt CCUSDCommandHandler::PackedOctetsRequired( TInt aNumUDUnits ) const
+ TInt CCUSDCommandHandler::PackedOctetsRequired(TInt aNumUDUnits) const
     {
     TRACE_FUNC_ENTRY
     TInt startBit = 0; 
 
     TInt octetsRequired = 0;
     TInt elementSizeInBits = ElementSizeInBits(TSmsDataCodingScheme::ESmsAlphabet7Bit);
-    if ( elementSizeInBits == 8 )
+    if (elementSizeInBits == 8)
          {
         octetsRequired=aNumUDUnits;
          }
     else
         {
-        octetsRequired =  ( startBit + aNumUDUnits*elementSizeInBits + 7 )/8;    // Rounds up
+        octetsRequired =  (startBit + aNumUDUnits*elementSizeInBits + 7 )/8;    // Rounds up
         }
     TRACE_FUNC_EXIT
     return octetsRequired;
@@ -363,13 +376,13 @@
  TBool CCUSDCommandHandler::IsDcsValid( const TUint8 aDcs ) const
      {
      TRACE_FUNC_ENTRY
-     TBool isDcsValid( EFalse );
+     TBool isDcsValid(EFalse);
                                                                 //      76543210
      TUint8 codingGroup  = ( aDcs & 0xF0 ) >> KHighNibbleShift; // bits XXXX____
      TUint8 characterSet = ( aDcs & 0x0C ) >> KQuarterShift;    // bits ____XX__
      TUint8 lowQuartet   = ( aDcs & 0x0F );                     // bits ____XXXX
   
-     switch ( codingGroup )
+     switch (codingGroup)
          {
          case 0x00:
          case 0x02:
@@ -404,6 +417,10 @@
                  }
              break;
              }
+         default:
+             {
+             break;
+             }
          }
      TRACE_FUNC_EXIT
      return isDcsValid;
@@ -413,7 +430,7 @@
     {
     TRACE_FUNC_ENTRY
     TInt ret;
-    switch ( aAlphabet )
+    switch (aAlphabet)
        {
        case TSmsDataCodingScheme::ESmsAlphabet7Bit:
            {
@@ -438,8 +455,8 @@
 void CCUSDCommandHandler::FormatUSSDReceivedData()
     {
     TRACE_FUNC_ENTRY
-    iReply.Create(KDefaultCmdBufLength);
-
+    iReply.Zero();
+    
     iReply.Append(KCRLF);
     iReply.Append(KAtCUSD);
     iReply.AppendNum(iDisplayRetMessage);
--- a/cbsatplugin/atmisccmdplugin/src/cusdreadwriteimp.cpp	Mon May 17 11:06:23 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-/* 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 :
- *
- */
-
-#include "cusdreadwriteimp.h"
-
-#include "cusdcommandhandler.h"
-#include "debug.h"
-
-CCUSSDReadMessageImpl* CCUSSDReadMessageImpl::NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession)
-    {
-    TRACE_FUNC_ENTRY
-    CCUSSDReadMessageImpl* self = new(ELeave) CCUSSDReadMessageImpl(aCallback, aUssdSession);
-    TRACE_FUNC_EXIT
-    return self;
-    }
-
-CCUSSDReadMessageImpl::CCUSSDReadMessageImpl(MUSSDCallback* aCallback, 
-                                             RMobileUssdMessaging& aUssdSession):
-    CActive(CActive::EPriorityStandard),
-    iCallback(aCallback),
-    iUssdSession(aUssdSession)
-    {
-    TRACE_FUNC_ENTRY
-    CActiveScheduler::Add(this);
-    TRACE_FUNC_EXIT
-    }
-
-CCUSSDReadMessageImpl::~CCUSSDReadMessageImpl()
-    {    
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSSDReadMessageImpl::RunL()
-    {
-    TRACE_FUNC_ENTRY
-    iCallback->HandleReadMessageComplete(iStatus.Int());
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSSDReadMessageImpl::DoCancel()
-    {
-    TRACE_FUNC_ENTRY
-    iUssdSession.CancelAsyncRequest(EMobileUssdMessagingReceiveMessage);
-    TRACE_FUNC_EXIT
-    }
-
-TInt CCUSSDReadMessageImpl::ReadUSSDMessage(TDes8& aReceivedData,
-                                            RMobileUssdMessaging::TMobileUssdAttributesV1& aUssdReadAttribute)
-    {
-    TRACE_FUNC_ENTRY
-    
-    TInt retCode = KErrNone;
-    if(!IsActive())
-        {
-        TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(aUssdReadAttribute);
-        iUssdSession.ReceiveMessage(iStatus, aReceivedData, msgAttributes);
-        SetActive();
-        }
-    else
-        {
-        retCode = KErrInUse;
-        }
-        
-    TRACE_FUNC_EXIT
-    return retCode;
-    }
-
-CCUSSDSendMessageImpl* CCUSSDSendMessageImpl::NewL(MUSSDCallback* aCallback, 
-                                                   RMobileUssdMessaging& aUssdSession)
-    {
-    TRACE_FUNC_ENTRY
-    CCUSSDSendMessageImpl* self = new(ELeave) CCUSSDSendMessageImpl(aCallback, aUssdSession);
-    TRACE_FUNC_EXIT
-    return self;
-    }
-
-CCUSSDSendMessageImpl::CCUSSDSendMessageImpl(MUSSDCallback* aCallback, 
-                                             RMobileUssdMessaging& aUssdSession):
-    CActive(CActive::EPriorityStandard),
-    iCallback(aCallback),
-    iUssdSession(aUssdSession)
-    {
-    TRACE_FUNC_ENTRY
-    CActiveScheduler::Add(this);
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSSDSendMessageImpl::RunL()
-    {
-    TRACE_FUNC_ENTRY
-    iCallback->HandleSendMessageComplete(iStatus.Int());
-    TRACE_FUNC_EXIT
-    }
-
-void CCUSSDSendMessageImpl::DoCancel()
-    {
-    TRACE_FUNC_ENTRY
-    iUssdSession.CancelAsyncRequest(EMobileUssdMessagingSendMessage);   
-    TRACE_FUNC_EXIT
-    }
-
-TInt CCUSSDSendMessageImpl::HandleSendUSSDCmd(const TDesC8& aCmd, 
-                                              RMobileUssdMessaging::TMobileUssdAttributesV1& aUSSDAttribute)
-    {    
-    TRACE_FUNC_ENTRY
-    TInt retCode = KErrNone;
-    if(!IsActive())
-        {
-        // Get USSD messaging caps
-        RMobileUssdMessaging::TMobileUssdCapsV1 ussdCaps;
-        RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPckg(ussdCaps);
-   
-        iUssdSession.GetCaps(ussdCapsPckg);   
-        ussdCaps=ussdCapsPckg();
-        
-        if(ussdCaps.iUssdFormat != RMobileUssdMessaging::KCapsPackedString)
-            {
-            retCode =  KErrArgument;
-            }
-        else
-            {
-            // we only support packed strings?
-            aUSSDAttribute.iFormat = RMobileUssdMessaging::EFormatPackedString;
-            TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(aUSSDAttribute);
-            iUssdSession.SendMessage(iStatus, aCmd, msgAttributes);
-            SetActive();
-            }   
-        }
-    else
-        {
-        retCode = KErrInUse;
-        }
-    TRACE_FUNC_EXIT
-    return retCode;
-    }
-
-CCUSSDSendMessageImpl::~CCUSSDSendMessageImpl()
-    {    
-    TRACE_FUNC_ENTRY
-    Cancel();
-    TRACE_FUNC_EXIT
-    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/src/ussdreadmessageimpl.cpp	Fri May 28 17:03:06 2010 +0300
@@ -0,0 +1,79 @@
+/* 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 :
+ *
+ */
+
+#include "ussdreadmessageimpl.h"
+
+#include "cusdcommandhandler.h"
+#include "debug.h"
+
+CUSSDReadMessageImpl* CUSSDReadMessageImpl::NewL(MUSSDCallback* aCallback, RMobileUssdMessaging& aUssdSession)
+    {
+    TRACE_FUNC_ENTRY
+    CUSSDReadMessageImpl* self = new(ELeave) CUSSDReadMessageImpl(aCallback, aUssdSession);
+    TRACE_FUNC_EXIT
+    return self;
+    }
+
+CUSSDReadMessageImpl::CUSSDReadMessageImpl(MUSSDCallback* aCallback, 
+                                             RMobileUssdMessaging& aUssdSession):
+    CActive(CActive::EPriorityStandard),
+    iCallback(aCallback),
+    iUssdSession(aUssdSession)
+    {
+    TRACE_FUNC_ENTRY
+    CActiveScheduler::Add(this);
+    TRACE_FUNC_EXIT
+    }
+
+CUSSDReadMessageImpl::~CUSSDReadMessageImpl()
+    {    
+    TRACE_FUNC_ENTRY
+    Cancel();
+    TRACE_FUNC_EXIT
+    }
+
+void CUSSDReadMessageImpl::RunL()
+    {
+    TRACE_FUNC_ENTRY
+    iCallback->HandleReadMessageComplete(iStatus.Int());
+    TRACE_FUNC_EXIT
+    }
+
+void CUSSDReadMessageImpl::DoCancel()
+    {
+    TRACE_FUNC_ENTRY
+    iUssdSession.CancelAsyncRequest(EMobileUssdMessagingReceiveMessage);
+    TRACE_FUNC_EXIT
+    }
+
+TInt CUSSDReadMessageImpl::ReadUSSDMessage(TDes8& aReceivedData,
+                                            RMobileUssdMessaging::TMobileUssdAttributesV1& aUssdReadAttribute)
+    {
+    TRACE_FUNC_ENTRY
+    
+    TInt retCode = KErrNone;
+    if(!IsActive())
+        {
+        TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(aUssdReadAttribute);
+        iUssdSession.ReceiveMessage(iStatus, aReceivedData, msgAttributes);
+        SetActive();
+        }
+    else
+        {
+        retCode = KErrInUse;
+        }
+        
+    TRACE_FUNC_EXIT
+    return retCode;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/src/ussdsendmessageimpl.cpp	Fri May 28 17:03:06 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 :
+ *
+ */
+
+#include "ussdsendmessageimpl.h"
+
+#include "cusdcommandhandler.h"
+#include "debug.h"
+
+CUSSDSendMessageImpl* CUSSDSendMessageImpl::NewL(MUSSDCallback* aCallback, 
+                                                   RMobileUssdMessaging& aUssdSession)
+    {
+    TRACE_FUNC_ENTRY
+    CUSSDSendMessageImpl* self = new(ELeave) CUSSDSendMessageImpl(aCallback, aUssdSession);
+    TRACE_FUNC_EXIT
+    return self;
+    }
+
+CUSSDSendMessageImpl::CUSSDSendMessageImpl(MUSSDCallback* aCallback, 
+                                             RMobileUssdMessaging& aUssdSession):
+    CActive(CActive::EPriorityStandard),
+    iCallback(aCallback),
+    iUssdSession(aUssdSession)
+    {
+    TRACE_FUNC_ENTRY
+    CActiveScheduler::Add(this);
+    TRACE_FUNC_EXIT
+    }
+
+void CUSSDSendMessageImpl::RunL()
+    {
+    TRACE_FUNC_ENTRY
+    iCallback->HandleSendMessageComplete(iStatus.Int());
+    TRACE_FUNC_EXIT
+    }
+
+void CUSSDSendMessageImpl::DoCancel()
+    {
+    TRACE_FUNC_ENTRY
+    iUssdSession.CancelAsyncRequest(EMobileUssdMessagingSendMessage);   
+    TRACE_FUNC_EXIT
+    }
+
+TInt CUSSDSendMessageImpl::SendUSSDCmd(const TDesC8& aCmd, 
+                                        RMobileUssdMessaging::TMobileUssdAttributesV1& aUSSDAttribute)
+    {    
+    TRACE_FUNC_ENTRY
+    TInt retCode = KErrNone;
+    if(!IsActive())
+        {
+        // Get USSD messaging caps
+        RMobileUssdMessaging::TMobileUssdCapsV1 ussdCaps;
+        RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPckg(ussdCaps);
+   
+        iUssdSession.GetCaps(ussdCapsPckg);   
+        ussdCaps=ussdCapsPckg();
+        
+        if(ussdCaps.iUssdFormat != RMobileUssdMessaging::KCapsPackedString)
+            {
+            retCode =  KErrArgument;
+            }
+        else
+            {
+            // we only support packed strings?
+            aUSSDAttribute.iFormat = RMobileUssdMessaging::EFormatPackedString;
+            TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(aUSSDAttribute);
+            iUssdSession.SendMessage(iStatus, aCmd, msgAttributes);
+            SetActive();
+            }   
+        }
+    else
+        {
+        retCode = KErrInUse;
+        }
+    TRACE_FUNC_EXIT
+    return retCode;
+    }
+
+CUSSDSendMessageImpl::~CUSSDSendMessageImpl()
+    {    
+    TRACE_FUNC_ENTRY
+    Cancel();
+    TRACE_FUNC_EXIT
+    }
--- a/group/bld.inf	Mon May 17 11:06:23 2010 +0300
+++ b/group/bld.inf	Fri May 28 17:03:06 2010 +0300
@@ -23,6 +23,7 @@
 #include "../bluetoothengine/group/bld.inf"
 #include "../atcommands/group/bld.inf"
 #include "../cbsatplugin/group/bld.inf"
+#include "../btobexprofiles/group/bld.inf"
 
 PRJ_EXPORTS