diff -r 4285b54b0d2c -r 4ddb65515edd usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/msmmserver.cpp --- a/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/msmmserver.cpp Mon May 03 14:13:42 2010 +0300 +++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/msmmserver.cpp Fri Jun 25 13:07:44 2010 +0800 @@ -21,13 +21,14 @@ */ #include "msmmserver.h" -#include #include "msmm_internal_def.h" #include "msmmsession.h" #include "msmmengine.h" #include "eventqueue.h" #include "msmmterminator.h" +#include "msmmdismountusbdrives.h" +#include #include #ifdef __FLOG_ACTIVE @@ -97,6 +98,26 @@ CleanupStack::PopAndDestroy(2, scheduler); } +CPolicyServer::TCustomResult CMsmmServer::CustomSecurityCheckL( + const RMessage2& aMsg, + TInt& /*aAction*/, + TSecurityInfo& /*aMissing*/) + { + CPolicyServer::TCustomResult returnValue = CPolicyServer::EFail; + + TSecureId ClientSID = aMsg.SecureId(); + + if (KFDFWSecureId == ClientSID) + { + returnValue = CPolicyServer::EPass; + } + else if ((KSidHbDeviceDialogAppServer == ClientSID) && SessionNumber() > 0) + { + returnValue = CPolicyServer::EPass; + } + return returnValue; + } + // Public functions // Construction and destruction CMsmmServer* CMsmmServer::NewLC() @@ -119,6 +140,8 @@ delete iEventQueue; delete iEngine; delete iTerminator; + delete iDismountErrData; + delete iDismountManager; REComSession::FinalClose(); #ifndef __OVER_DUMMYCOMPONENT__ @@ -136,7 +159,7 @@ if (KMaxClientCount <= SessionNumber()) { // There is a connection to MSMM server already. - // Currently design of MSMM allows only one activated client + // Currently design of MSMM can have two clients, one FDF and the other Indicator UI // at any time. User::Leave(KErrInUse); } @@ -188,6 +211,26 @@ } } +void CMsmmServer::DismountUsbDrivesL(TUSBMSDeviceDescription& aDevice) + { + LOG_FUNC + delete iDismountManager; + iDismountManager = NULL; + iDismountManager= CMsmmDismountUsbDrives::NewL(); + + //Also notify the MSMM plugin of beginning of dismounting + iDismountErrData->iError = EHostMsEjectInProgress; + iDismountErrData->iE32Error = KErrNone; + iDismountErrData->iManufacturerString = aDevice.iManufacturerString; + iDismountErrData->iProductString = aDevice.iProductString; + iDismountErrData->iDriveName = 0x0; + + TRAP_IGNORE(iPolicyPlugin->SendErrorNotificationL(*iDismountErrData)); + + // Start dismounting + iDismountManager->DismountUsbDrives(*iPolicyPlugin, aDevice); + } + // Private functions // CMsmmServer Construction CMsmmServer::CMsmmServer(TInt aPriority) @@ -205,6 +248,7 @@ iEventQueue = CDeviceEventQueue::NewL(*this); iTerminator = CMsmmTerminator::NewL(*iEventQueue); iPolicyPlugin = CMsmmPolicyPluginBase::NewL(); + iDismountErrData = new (ELeave) THostMsErrData; if (!iPolicyPlugin) { // Not any policy plugin implementation available