diff -r 3dcb815346df -r 4096754ee773 localconnectivityservice/obexreceiveservices/opp/src/oppcontroller.cpp --- a/localconnectivityservice/obexreceiveservices/opp/src/oppcontroller.cpp Thu Aug 19 10:46:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,865 +0,0 @@ -/* -* 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 components -#include "oppcontroller.h" -#include "btengdevman.h" -#include -#include "debug.h" -#include -#include -#include -#include -#include -#include // The AIW service handler -#include -#include -#include -#include -#include -#include - -// 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(EFalse); // false because note about receiving failed should appear - } - -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(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(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 - - if(iObexObject->Name().Length() > KMaxFileName) - { - TRACE_INFO( _L( "[oppreceiveservice] COPPController: PutPacketIndication truncating name of file being received\t" ) ); - TRAPD(err, iObexObject->SetNameL(iObexObject->Name().Left(KMaxFileName))); - if(err != KErrNone) - { - return KErrAccessDenied; - } - } - - 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(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|EFileShareReadersOrWriters)); - 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