diff -r 613943a21004 -r 9386f31cc85b btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp --- a/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1101 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Obex Server image receiver module implementation -* -*/ - - -// INCLUDE FILES -#include "BIPController.h" -#include "BIPCapabilityHandler.h" -#include "BIPImageHandler.h" - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "debug.h" -#include -#include - -// CONSTANTS -_LIT8(KBipCapabilityType, "x-bt/img-capabilities\0"); -const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3 -const TInt KBufferSize = 0x10000; // 64 kB -_LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" ); -_LIT(KLocFileName, "btdialogs_"); -_LIT(KPath, "z:/resource/qt/translations/"); - - -// ================= 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); - iDialog = CObexUtilsDialog::NewL(this); - TBool ok = HbTextResolverSymbian::Init(KLocFileName, KPath); - if (!ok) - { - User::Leave( KErrNotFound ); - } - TRACE_FUNC_EXIT - } - -// --------------------------------------------------------- -// ~CBIPController() -// --------------------------------------------------------- -// -CBIPController::~CBIPController() - { - TRACE_FUNC_ENTRY - delete iGetObject; - delete iBIPCapabilityHandler; - delete iBIPImageHandler; - delete iLowMemoryActiveCDrive; - delete iLowMemoryActiveMMC; - delete iBuf; - delete iBTObject; - delete iDevMan; - if (iResultArray) - { - iResultArray->ResetAndDestroy(); - delete iResultArray; - } - iFs.Close(); - delete iDialog; - delete iProgressDialog; - delete iRecvDoneDialog; - 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 - iReceivingFailed = ETrue; - iShowRecvCompleteDialog = EFalse; - if( iBTTransferState == ETransferPut || (!aAbort && iBTTransferState == ETransferPutDiskError) ) - { - if(iBTObject) - { - iBTObject->Reset(); - } - CancelTransfer(); - - TRAP_IGNORE( - HBufC* note = HbTextResolverSymbian::LoadLC(_L("txt_bt_dpophead_receiving_failed")); - iDialog->ShowErrorNoteL(note->Des()); - CleanupStack::PopAndDestroy(note); - ); - } - 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 - iReceivingFailed = EFalse; - 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 - - (void) aRemoteInfo; - (void) aInfo; - - // 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(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(iDevMan->GetDevices(nameSearch, iResultArray)); - - return KErrNone; - } - -// --------------------------------------------------------- -// ObexDisconnectIndication() -// --------------------------------------------------------- -// -void CBIPController::ObexDisconnectIndication(const TDesC8& aInfo) - { - TRACE_FUNC - (void) aInfo; - } - -// --------------------------------------------------------- -// TransportDownIndication() -// --------------------------------------------------------- -// -void CBIPController::TransportDownIndication() - { - TRACE_FUNC - if(!iReceivingFailed && iShowRecvCompleteDialog) - { - //Launch recevice completed dialog. - iRecvDoneDialog = CHbDeviceDialogSymbian::NewL(); - iRecvDoneDialog->SetObserver(this); - - CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); - CleanupStack::PushL(variantMap); - - TInt dialogIdx = TBluetoothDialogParams::EReceiveDone; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); - - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); - - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); - - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); - - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - - iRecvDoneDialog->Show( KBTDevDialogId(), *variantMap, this ); - CleanupStack::PopAndDestroy(variantMap); - - iShowRecvCompleteDialog = EFalse; - } - - // Remove receiving buffer and files used during file receiving. - // - delete iBTObject; - iBTObject = NULL; - TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL (iFullPathFilename)); - iFs.Close(); - iFileCount = 0; - } - -// --------------------------------------------------------- -// 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 ( 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)); - //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); - - 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()) - { - TRAPD(err, UpdateReceivingIndicatorL()); - if(err < KErrNone) - { - return err; - } - } - 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(); - iFileCount++; - iShowRecvCompleteDialog = ETrue; - } - 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. - (void) aPathInfo; - (void) aInfo; - - 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)); - //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); - - 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) - { - if(iReceivingFileName.Length() > 0) - { - iProgressDialog = CHbDeviceDialogSymbian::NewL(); - iProgressDialog->SetObserver(this); - - CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); - CleanupStack::PushL(variantMap); - - TInt dialogIdx = TBluetoothDialogParams::EReceiveProgress; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); - - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); - - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); - - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); - - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - - iDialogActive = ETrue; - iProgressDialog->Show( KBTDevDialogId(), *variantMap, this ); - CleanupStack::PopAndDestroy(variantMap); - } - else - { - // TODO - iDialogActive = ETrue; - } - } - else - { - iDialogActive = ETrue; - /* - * TODO - The functionality provided by CGlobalDialog will be removed - * TODO - and this will be provided by CGlobalProgressDialog. - */ - - } - } - -void CBIPController::UpdateReceivingIndicatorL() - { - if(iProgressDialog) - { - CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); - CleanupStack::PushL(variantMap); - - TInt bytesReceived = iBTObject->BytesReceived(); - CHbSymbianVariant* progress = CHbSymbianVariant::NewL( (TAny*) &bytesReceived, CHbSymbianVariant::EInt ); - CleanupStack::PushL(progress); - User::LeaveIfError(variantMap->Add(_L("progress"), progress)); - CleanupStack::Pop(progress); - - iProgressDialog->Update(*variantMap); - CleanupStack::PopAndDestroy(variantMap); - } - } - -void CBIPController::CloseReceivingIndicator(TBool aResetDisplayedState) - { - TRACE_FUNC - if(aResetDisplayedState) - { - iNoteDisplayed = EFalse; - } - if(iProgressDialog) - { - iProgressDialog->Cancel(); - iDialogActive = EFalse; - delete iProgressDialog; - iProgressDialog = 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) - { - (void) 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()))); - } - } - } - } - - TBool CBIPController::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; - } - - TBool CBIPController::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; - } - - void CBIPController::DialogDismissed(TInt aButtonId) - { - (void) aButtonId; - } - - void CBIPController::DataReceived(CHbSymbianVariantMap& aData) - { - if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0) - { - TInt val = *(static_cast(aData.Get(_L("actionResult"))->Data())); - switch(val) - { - case TBluetoothDialogParams::ECancelReceive: - { - //User choose to cancel receiving. - CancelTransfer(); - }break; - - case TBluetoothDialogParams::EHide: - { - //Use choose to hide the progress dialog. - CloseReceivingIndicator(EFalse); - }break; - - case TBluetoothDialogParams::EShow: - case TBluetoothDialogParams::ECancelShow: - { - //In case of Show, the device dialog will handle the opening of conversation view. - iRecvDoneDialog->Cancel(); - delete iRecvDoneDialog; - iRecvDoneDialog = NULL; - }break; - } - } - } - - void CBIPController::DeviceDialogClosed(TInt aCompletionCode) - { - (void) aCompletionCode; - } - - -//////////////////////////// Global part //////////////////////////// - -// End of File