--- a/filemanager/Engine/src/CFileManagerIRReceiver.cpp Tue Feb 02 00:03:31 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,604 +0,0 @@
-/*
-* Copyright (c) 2002-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: Receives obex object via InfraRed, used to receive files
-*
-*/
-
-
-// INCLUDE FILES
-#include <obex.h>
-#include "CFileManagerIRReceiver.h"
-#include "MFileManagerProcessObserver.h"
-#include "CFileManagerEngine.h"
-#include "CFileManagerUtils.h"
-#include "CFileManagerCommonDefinitions.h"
-#include "FileManagerDebug.h"
-
-
-// CONSTANTS
-const TUint KDefaultObexPort = 65;
-const TUint KBufferGranularity = 2048;
-const TInt KFullPercentage = 100;
-const TInt KInactiveTimeout = 60000000;
-
-// Required for IR
-_LIT( KTransportTinyTp, "IrTinyTP" );
-_LIT8( KClassNameObex, "OBEX" );
-_LIT8( KAttName, "IrDA:TinyTP:LsapSel" );
-_LIT( KTemporaryFile, "__FileManagerIrdaReceive.tmp" );
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CFileManagerEngine
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CFileManagerIRReceiver::CFileManagerIRReceiver(
- MFileManagerProcessObserver& aObserver,
- CFileManagerEngine& aEngine,
- RFs& aFs ) :
- iObserver( aObserver ),
- iEngine( aEngine ),
- iFs( aFs )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerIRReceiver* CFileManagerIRReceiver::NewL(
- MFileManagerProcessObserver& aObserver,
- const TDesC& aPath,
- CFileManagerEngine& aEngine )
- {
- FUNC_LOG
-
- CFileManagerIRReceiver* self = new( ELeave ) CFileManagerIRReceiver(
- aObserver,
- aEngine,
- aEngine.Fs() );
-
- CleanupStack::PushL( self );
- self->ConstructL( aPath );
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::ConstructL( const TDesC& aPath )
- {
- TPtrC ptrPath( CFileManagerUtils::StripFinalBackslash( aPath ) );
- TInt len( ptrPath.Length() +
- KFmgrBackslashSpace + KTemporaryFile().Length() );
- if ( len > KMaxFileName )
- {
- User::Leave( KErrBadName );
- }
- iTempFile = HBufC::NewL( len );
- TPtr ptr( iTempFile->Des() );
- ptr.Append( ptrPath );
- CFileManagerUtils::EnsureFinalBackslash( ptr );
- ptr.Append( KTemporaryFile );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ReceiveFileL
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerIRReceiver::ReceiveFileL()
- {
- FUNC_LOG
-
- ResetInactivityTimer();
-
- TObexIrProtocolInfo obexIrInfo;
- obexIrInfo.iAddr.SetPort( KDefaultObexPort );
- obexIrInfo.iTransport = KTransportTinyTp;
- obexIrInfo.iClassName = KClassNameObex;
- obexIrInfo.iAttributeName = KAttName;
-
- iObexServer = CObexServer::NewL( obexIrInfo );
-
- User::LeaveIfError( iObexServer->Start( this ) );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::~CFileManagerIRReceiver
-// Destructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerIRReceiver::~CFileManagerIRReceiver()
- {
- FUNC_LOG
-
- if ( iObexServer )
- {
- if ( iObexServer->IsStarted() )
- {
- iObexServer->Stop();
- }
- delete iObexServer;
- }
- delete iObexBufObject;
-
- if ( iTempFile )
- {
- iFs.Delete( *iTempFile );
- delete iTempFile;
- }
- delete iBuffer;
- delete iInactivityTimer;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::StopReceiving
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerIRReceiver::StopReceiving()
- {
- FUNC_LOG
-
- iError = KErrCancel;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ErrorIndication
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::ErrorIndication(TInt aError )
- {
- ERROR_LOG1( "CFileManagerIRReceiver::ErrorIndication-aError=%d", aError )
-
- if ( iError == KErrNone )
- {
- iError = aError;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::TransportUpIndication
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::TransportUpIndication()
- {
- FUNC_LOG
-
- StopInactivityTimer();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::TransportDownIndication
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::TransportDownIndication()
- {
- FUNC_LOG
-
- TInt err( KErrNone );
- if ( iObexBufObject )
- {
- // transfer has been cancelled, set temp buffer so obexobject won't
- // create temp file again
- delete iBuffer;
- iBuffer = NULL;
- TRAP( err, iBuffer = CBufFlat::NewL( KBufferGranularity ) );
- if ( err == KErrNone )
- {
- TRAP( err, iObexBufObject->SetDataBufL( iBuffer ) );
- }
- }
-
- if ( iTempFile )
- {
- iFs.Delete( *iTempFile );
- }
-
- TRAP( err, iObserver.ProcessFinishedL( iError ) );
- if ( err != KErrNone )
- {
- iObserver.Error( err );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::TargetHeaderReceived
-//
-// -----------------------------------------------------------------------------
-//
-TBool CFileManagerIRReceiver::TargetHeaderReceived(TDesC8& /* aTargetHeader */ )
- {
- FUNC_LOG
-
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ObexConnectIndication
-//
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::ObexConnectIndication
- ( const TObexConnectInfo& /* aRemoteInfo */,
- const TDesC8& /* aInfo */ )
- {
- FUNC_LOG
-
- if ( iError == KErrCancel )
- {
- return KErrCancel;
- }
-
- TRAPD( err, iObserver.ProcessStartedL(
- MFileManagerProcessObserver::EIRReceiveProcess ) );
-
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ObexDisconnectIndication
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::ObexDisconnectIndication(const TDesC8& /* aInfo */ )
- {
- FUNC_LOG
- // from MObexServerNotify
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::PutRequestIndication
-//
-// -----------------------------------------------------------------------------
-//
-CObexBufObject* CFileManagerIRReceiver::PutRequestIndication()
- {
- FUNC_LOG
-
- // delete old buffer if it exists
- delete iObexBufObject;
- iObexBufObject = NULL;
- iFs.Delete( *iTempFile );
-
- TRAPD( err, iObexBufObject = CObexBufObject::NewL( NULL ) );
- if ( err == KErrNone )
- {
- TRAP( err, iObexBufObject->SetDataBufL( *iTempFile ) );
- }
-
- if ( err != KErrNone )
- {
- return NULL;
- }
-
- return iObexBufObject;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::PutPacketIndication
-//
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::PutPacketIndication()
- {
- FUNC_LOG
-
- if ( iError == KErrCancel )
- {
- return KErrCancel;
- }
-
- const TInt size( iObexBufObject->Length() );
-
- if ( !iDiskSpaceChecked )
- {
- TParsePtrC parse( *iTempFile );
- TRAP( iError, iEnoughSpace = iEngine.EnoughSpaceL(
- parse.DriveAndPath(), size,
- MFileManagerProcessObserver::EIRReceiveProcess ) );
- iDiskSpaceChecked = ETrue;
- }
-
- if ( iError == KErrNone && iEnoughSpace )
- {
- const TInt received( iObexBufObject->BytesReceived());
- TInt percent( 0 );
- if ( size != 0)
- {
- percent = KFullPercentage * received / size;
- }
- TRAPD( error, iObserver.ProcessAdvanceL( percent ) );
- if ( iError == KErrNone )
- {
- iError = error;
- }
- }
- else if ( !iEnoughSpace )
- {
- if ( iError == KErrNone )
- {
- iError = KErrDiskFull;
- }
- }
-
- return iError;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::PutCompleteIndication
-//
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::PutCompleteIndication()
- {
- FUNC_LOG
-
- if ( iError == KErrCancel )
- {
- iFs.Delete( *iTempFile );
- iDiskSpaceChecked = EFalse;
- return KErrNone;
- }
-
- TInt error( KErrNone );
- TFileName fileName;
- TParsePtrC parse( *iTempFile );
- fileName.Append( parse.DriveAndPath() );
- TPtrC objName( iObexBufObject->Name() );
-
- if ( fileName.Length() + objName.Length() > KMaxFileName )
- {
- iFs.Delete( *iTempFile );
- iDiskSpaceChecked = EFalse;
- iObserver.Error( KErrBadName );
- return KErrBadName;
- }
-
- fileName.Append( objName );
- delete iObexBufObject;
- iObexBufObject = NULL;
- TBool nameFound( EFalse );
- TRAP( error, nameFound = iEngine.IsNameFoundL( fileName ) );
- if ( error == KErrNone && nameFound )
- {
- TFileName name;
- TBool overWrite( ETrue );
- TRAP( error, overWrite = iObserver.ProcessQueryOverWriteL(
- fileName, name,
- MFileManagerProcessObserver::EIRReceiveProcess ) );
-
- if ( error == KErrNone )
- {
- if ( overWrite )
- {
- error = iFs.Delete( fileName );
- if ( error == KErrNone )
- {
- iFs.Rename( *iTempFile, fileName );
- }
- if ( error != KErrNone )
- {
- iObserver.Error( error );
- }
- }
- else
- {
- TBool askAgain( ETrue );
- TRAP( error, nameFound = iEngine.IsNameFoundL( name ) );
- while( error == KErrNone && nameFound && askAgain )
- {
- TFileName newName;
- TRAP( error, overWrite =
- iObserver.ProcessQueryOverWriteL(
- name,
- newName,
- MFileManagerProcessObserver::EIRReceiveProcess
- ) );
- if ( error != KErrNone )
- {
- iError = error;
- askAgain = EFalse;
- name.Zero();
- }
- else if ( !overWrite )
- {
- name.Zero();
- name.Append( newName );
- }
- else
- {
- askAgain = EFalse;
- }
- }
- if ( name.Length() > 0 )
- {
- TParsePtrC parse( *iTempFile );
- name.Insert( 0, parse.DriveAndPath() );
- iFs.Rename( *iTempFile, name );
- }
- }
- }
- else
- {
- iError = error;
- }
- }
- else
- {
-
- iFs.Rename( *iTempFile, fileName );
- }
- iFs.Delete( *iTempFile );
- iDiskSpaceChecked = EFalse;
-
- return error;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::GetRequestIndication
-// Empty because needed only for send functionality
-// -----------------------------------------------------------------------------
-//
-CObexBufObject* CFileManagerIRReceiver::GetRequestIndication
- (CObexBaseObject* /* aRequiredObject */)
- {
- FUNC_LOG
-
- return NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::GetPacketIndication
-// Empty because needed only for send functionality
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::GetPacketIndication()
- {
- FUNC_LOG
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::GetCompleteIndication
-// Empty because needed only for send functionality
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::GetCompleteIndication()
- {
- FUNC_LOG
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::SetPathIndication
-// Empty because setpath not supported
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::SetPathIndication(
- const CObex::TSetPathInfo& /* aPathInfo*/ , const TDesC8& /* aInfo */)
- {
- FUNC_LOG
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::AbortIndication
-// Empty because needed only for send functionality
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::AbortIndication()
- {
- FUNC_LOG
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::ResetInactivityTimer
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::ResetInactivityTimer()
- {
- FUNC_LOG
-
- StopInactivityTimer();
-
- TRAPD( err, iInactivityTimer =
- CPeriodic::NewL( CActive::EPriorityStandard ) );
- if ( err == KErrNone )
- {
- iInactivityTimer->Start(
- KInactiveTimeout,
- KInactiveTimeout,
- TCallBack( InactivityTimeout, this ) );
-
- INFO_LOG( "CFileManagerIRReceiver::ResetInactivityTimer-Timer started" )
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::InactivityTimeout
-//
-// -----------------------------------------------------------------------------
-//
-TInt CFileManagerIRReceiver::InactivityTimeout( TAny* aPtr )
- {
- FUNC_LOG
-
- CFileManagerIRReceiver* self =
- static_cast< CFileManagerIRReceiver* >( aPtr );
-
- self->StopInactivityTimer();
- self->CloseConnection();
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::StopInactivityTimer
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::StopInactivityTimer()
- {
- FUNC_LOG
-
- delete iInactivityTimer;
- iInactivityTimer = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerIRReceiver::CloseConnection
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerIRReceiver::CloseConnection()
- {
- FUNC_LOG
-
- StopReceiving();
-
- if ( iObexServer )
- {
- if ( iObexServer->IsStarted() )
- {
- INFO_LOG( "CFileManagerIRReceiver::CloseConnection-Stop server" )
-
- iObexServer->Stop();
- }
- }
-
- TRAPD( err, iObserver.ProcessFinishedL( KErrCancel ) );
- if ( err != KErrNone )
- {
- iObserver.Error( err );
- }
- }
-
-// End of File