diff -r 0aa8cc770c8a -r 4a793f564d72 connectivitymodules/SeCon/plugins/ftp/src/sconftpplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectivitymodules/SeCon/plugins/ftp/src/sconftpplugin.cpp Wed Sep 01 12:20:56 2010 +0100 @@ -0,0 +1,880 @@ +/* +* Copyright (c) 2005-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: File Transfer Profile Plug-in implementation +* +*/ + + +// INCLUDE FILES + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include "sconftpplugin.h" +#include "sconftp.h" +#include "sconftppluginutils.h" +#include "sconservicetimer.h" +#include "debug.h" + + +// CONSTANTS +_LIT(KSConFTPLibName, "sconftp.dll"); +const TInt KSConFTPUidValue = 0x10009D8D; +const TUid KSConFTPUid = {KSConFTPUidValue}; + +// Folder listing type from IrObex specification +_LIT8( KSConFolderListType, "x-obex/folder-listing" ); + +_LIT( K_C_ROOT, "C:\\" ); +const TInt KSConBufSize = 262144; // 256KB +// Time (in milliseconds) for the timer +const TInt KSConTimeOutValue = 60000000; +// Flags used to indicate SetPath commands +const TInt KSConNULLSetPath = 0x00; + +const TInt KSConHeaderMaxLength = 256; + +// ============================= MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::NewL() +// Two-phase constructor +// ----------------------------------------------------------------------------- +// +CSConFTPplugin* CSConFTPplugin::NewL() + { + TRACE_FUNC_ENTRY; + CSConFTPplugin* self = new ( ELeave ) CSConFTPplugin(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + TRACE_FUNC_EXIT; + return( self ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::~CSConFTPplugin() +// Destructor +// ----------------------------------------------------------------------------- +// +CSConFTPplugin::~CSConFTPplugin() + { + TRACE_FUNC_ENTRY; + + // Disconnect from services. + Disconnect(); + + if ( iFTPHandler ) + { + delete iFTPHandler; + iFTPHandler = NULL; + iFTPlib.Close(); + } + + delete iBuffer; + iBuffer = NULL; + delete iObject; + iObject = NULL; + + if ( iServiceTimer ) + { + iServiceTimer->Cancel(); + } + + delete iServiceTimer; + iServiceTimer = NULL; + + if ( iFileObject ) + { + delete iFileObject; + iFileObject = NULL; + } + + + delete iShutdownWatcher; + iShutdownWatcher = NULL; + + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::IsOBEXActive() +// Returns active status of OBEX session +// ----------------------------------------------------------------------------- +// +TBool CSConFTPplugin::IsOBEXActive() + { + TRACE_FUNC; + return iSessionActive; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::NotifyShutdown() +// System is shutting down +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::NotifyShutdown() + { + TRACE_FUNC; + iShutdownInProgress = ETrue; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::LoadFTPDllL() +// Loads sconftp.dll module +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::LoadFTPDllL() + { + TRACE_FUNC_ENTRY; + // Dynamically load DLL + User::LeaveIfError( iFTPlib.Load( KSConFTPLibName ) ); + if ( iFTPlib.Type()[1] != KSConFTPUid ) + { + LOGGER_WRITE( "KSConFTPUidValue incorrect" ); + iFTPlib.Close(); + User::Leave( KErrNotFound ); + } + TSConCreateCSConFTPFunc CreateCSConFTPL = + (TSConCreateCSConFTPFunc)iFTPlib.Lookup(1); + iFTPHandler = (CSConFTP*)CreateCSConFTPL(); + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::Disconnect() +// Closes initialized services +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::Disconnect() + { + TRACE_FUNC_ENTRY; + + iLinkAdapter.Close(); + iSocketServer.Close(); + + if ( iStartTimer != EFalse ) + { + iServiceTimer->Cancel(); + iServiceTimer->StartTimer(); + } + + delete iObject; + iObject = NULL; + + if ( iFileObject ) + { + delete iFileObject; + iFileObject = NULL; + } + if ( iFTPHandler ) + { + delete iFTPHandler; + iFTPHandler = NULL; + iFTPlib.Close(); + } + + TRACE_FUNC_EXIT + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::ErrorIndication( TInt aError ) +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::ErrorIndication( TInt aError ) + { + TRACE_FUNC_ENTRY; + LOGGER_WRITE_1( "aError : %d", aError ); + + if ( iFTPHandler ) + { + iFTPHandler->AbortFileTransfer( iObject ); + } + + if ( iObject ) + { + delete iObject; + iObject = NULL; + } + + if ( iFileObject ) + { + iFileObject->Reset(); + delete iFileObject; + iFileObject = NULL; + } + + // Keep compiler happy + (void)aError; + + delete iShutdownWatcher; + iShutdownWatcher = NULL; + + if ( iLinkAdapter.IsOpen() ) + { + // Cancel ActivateActiveRequester & allow going to low power mode + TInt err2 = iLinkAdapter.CancelLowPowerModeRequester(); + LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err2 ); + } + + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::AbortIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::AbortIndication() + { + TRACE_FUNC_ENTRY; + if ( iFTPHandler ) + { + iFTPHandler->AbortFileTransfer( iObject ); + } + + if ( iObject ) + { + delete iObject; + iObject = NULL; + } + + if ( iFileObject ) + { + iFileObject->Reset(); + delete iFileObject; + iFileObject = NULL; + } + + delete iShutdownWatcher; + iShutdownWatcher = NULL; + + if ( iLinkAdapter.IsOpen() ) + { + // Cancel ActivateActiveRequester & allow going to low power mode + TInt err = iLinkAdapter.CancelLowPowerModeRequester(); + LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); + } + + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::TransportUpIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::TransportUpIndication() + { + TRACE_FUNC; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, +// const TDesC8& aInfo ) +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::ObexConnectIndication( + const TObexConnectInfo& /*aRemoteInfo*/, + const TDesC8& /*aInfo*/ ) + { + TRACE_FUNC_ENTRY; + TInt err( KErrNone ); + iStartTimer = ETrue; + + if ( iMediaType == ESrcsMediaBT && iObexServer ) + { + TSockAddr remoteAddr; + iObexServer->RemoteAddr( remoteAddr ); + + TBTSockAddr btSockAddr( remoteAddr ); + TBTDevAddr devAddr = btSockAddr.BTAddr(); + + err = iSocketServer.Connect(); + LOGGER_WRITE_1("iSocketServer.Connect err: %d", err ); + if ( !err ) + { + err = iLinkAdapter.Open( iSocketServer, devAddr ); + LOGGER_WRITE_1("iLinkAdapter.Open err: %d", err ); + } + // Ignore all BT link errors + err = KErrNone; + } + + if ( err == KErrNone && !iFTPHandler ) + { + TRAP( err, LoadFTPDllL() ); + LOGGER_WRITE_1( "LoadFTPDllL returned : %d", err ); + } + + if ( err == KErrNone ) + { + iFTPHandler->SetProfile( EStandard ); + LOGGER_WRITE( "CSConFTPplugin::ObexConnectIndication() : iServiceTimer->StopTimer()" ); + iServiceTimer->Cancel(); + iServiceTimer->StopTimer(); + } + + TRACE_FUNC_EXIT; + LOGGER_WRITE_1( "CSConFTPplugin::ObexConnectIndication returned %d", err ); + return TFTPpluginUtils::ConvertFTPResponseCode( err ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::ObexDisconnectIndication( const TDesC8& ) +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::ObexDisconnectIndication( const TDesC8& ) + { + TRACE_FUNC_ENTRY; + Disconnect(); + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::TransportDownIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::TransportDownIndication() + { + TRACE_FUNC_ENTRY; + Disconnect(); + if ( iBuffer ) + { + iBuffer->Reset(); + } + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::PutRequestIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +CObexBufObject* CSConFTPplugin::PutRequestIndication() + { + TRACE_FUNC_ENTRY; + TInt ret( KErrNone ); + TInt err( KErrNone ); + iPutError = KErrNone; + + if ( iBuffer ) + { + iBuffer->Reset(); + } + + if ( iObject ) + { + delete iObject; + iObject = NULL; + } + + TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); + + if ( err != KErrNone ) + { + return NULL; + } + + if ( !iFTPHandler ) + { + LOGGER_WRITE( "Creating iFTPHandler has failed" ); + return NULL; + } + + TRAP( err, ret = iFTPHandler->PutFileObjectInitL( iObject, iBuffer ) ); + + if ( err != KErrNone ) + { + LOGGER_WRITE_1( "iFTPHandler->PutFileObjectInitL() leaves: %d", err ); + return NULL; + } + if ( ret != KErrNone ) + { + LOGGER_WRITE_1( "PutFileObjectInitL failed - returning error in next PutPacketIndication : %d", ret ); + iPutError = ret; + } + iPutPacketIndicationCalled = EFalse; + + if ( !iShutdownWatcher ) + { + TRAP( err, iShutdownWatcher = CShutdownWatcher::NewL( this ) ); + if ( err == KErrNone ) + { + iShutdownWatcher->StartShutdownWatcher(); + } + else + { + LOGGER_WRITE_1( "CShutdownWatcher::NewL leaves: %d", err ); + } + } + + if ( iLinkAdapter.IsOpen() ) + { + // request active BT mode (high power mode) + err = iLinkAdapter.ActivateActiveRequester(); + LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); + } + + TRACE_FUNC_EXIT; + return( iObject ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::PutPacketIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::PutPacketIndication() + { + TRACE_FUNC_ENTRY; + TInt ret( KErrNone ); + + // always normal file transfer + if ( (TInt)iObject->Length() > 0 ) + { + if ( !iPutPacketIndicationCalled ) + { + // This is first check, need to check only once + TFileName path; + iFTPHandler->GetPath( path ); + if ( path.CompareF( K_C_ROOT ) == 0 ) + { + // path forbidden + ret = KErrAccessDenied; + } + else + { + if ( iPutError != KErrNone ) + { + ret = iPutError; + LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() : PutError : %d", iPutError ); + } + else + { + // check required free space + // if filesize is small ( <65k ) it fits into one package and its already saved to filesystem. + // if file is larger, need to check is there enought free space in device. + + const TUint32 filesize = iObject->Length(); + LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() filesize %d", filesize ); + LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() iObject->BytesReceived() %d", iObject->BytesReceived() ); + if ( filesize > iObject->BytesReceived() ) + { + LOGGER_WRITE( "CSConFTPplugin::PutPacketIndication() : check freespace" ); + // file does not fit into one obex packet, check is there enought free space in current drive + if ( iFTPHandler->IsCurrentDiskSpaceBelowCritical( filesize ) ) + { + LOGGER_WRITE( "CSConFTPplugin::PutPacketIndication() : returning KErrNoMemory" ); + ret = KErrNoMemory; + } + } + } + } + } + + if ( iShutdownInProgress ) + { + LOGGER_WRITE( "ShutdownInProgress, abort" ); + ret = KErrDisconnected; + } + } + + if ( !iPutPacketIndicationCalled ) + { + // Need to check only once + iPutPacketIndicationCalled = ETrue; + + //Check if filename is too long. + TFileName path; + iFTPHandler->GetPath( path ); + if ( ret == KErrNone && path.Length() + iObject->Name().Length() > KMaxFileName ) + { + LOGGER_WRITE_1( "Name length overflow! : %d", path.Length() + iObject->Name().Length() ); + ret = KErrBadName; + } + } + + if ( ret != KErrNone ) + { + if ( iFTPHandler ) + { + iFTPHandler->AbortFileTransfer( iObject ); + } + + delete iObject; + iObject = NULL; + + if ( iLinkAdapter.IsOpen() ) + { + // Cancel ActivateActiveRequester & allow going to low power mode + TInt err = iLinkAdapter.CancelLowPowerModeRequester(); + LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); + } + } + + LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication returned: %d", ret ); + return TFTPpluginUtils::ConvertFTPResponseCode( ret ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::PutCompleteIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::PutCompleteIndication() + { + TRACE_FUNC_ENTRY; + TInt ret( KErrNone ); + TInt err( KErrNone ); + + if ( iLinkAdapter.IsOpen() ) + { + // Cancel ActivateActiveRequester & allow going to low power mode + TInt err2 = iLinkAdapter.CancelLowPowerModeRequester(); + LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err2 ); + } + + TObexHeaderMask validHdrs = iObject->ValidHeaders(); + TTime time = iObject->Time(); + + // shutdownWatcher is not needed anymore + delete iShutdownWatcher; + iShutdownWatcher = NULL; + + TInt size = iObject->BytesReceived(); + + if (!(validHdrs & KObexHdrTime)) + { + LOGGER_WRITE( "CSConFTPplugin::PutCompleteIndication() no valid time header received - using hometime" ); + time.HomeTime(); + TRAP( ret, iObject->SetTimeL(time) ); + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication SetTimeL %d", ret ); + } + + if ( ( validHdrs & KObexHdrBody ) || ( validHdrs & KObexHdrEndOfBody ) ) + { + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : number of received bytes %d", size ); + TSConUsedMedia media( ESConNoMedia ); + + switch ( iMediaType ) + { + case ESrcsMediaBT: + media = ESConBTMedia; + break; + case ESrcsMediaIrDA: + media = ESConIRMedia; + break; + case ESrcsMediaUSB: + media = ESConUSBMedia; + break; + default: + media = ESConNoMedia; + break; + } + iFTPHandler->SetUsedMedia( media ); + + TRAP( ret, err = + this->iFTPHandler->PutFileObjectFinalizeL( iObject ) ); + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication :PutFileObjectL %d", ret ); + } + else + { + LOGGER_WRITE( "CSConFTPplugin::PutCompleteIndication() : Delete starts" ); + TRAP( ret, err = this->iFTPHandler->DeleteObjectL( iObject->Name() ) ); + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : DeleteObjectL %d", ret ); + } + + if ( iObject ) + { + delete iObject; + iObject = NULL; + } + + iFTPHandler->DeleteTempFile(); + + if ( ret != KErrNone ) + { + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : returned %d", ret ); + return TFTPpluginUtils::ConvertFTPResponseCode( ret ); + } + + LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : returned %d", err ); + return TFTPpluginUtils::ConvertFTPResponseCode( err ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::GetRequestIndication( CObexBaseObject* aRequiredObject ) +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +CObexBufObject* CSConFTPplugin::GetRequestIndication( + CObexBaseObject* aRequiredObject ) + { + TRACE_FUNC_ENTRY; + CObexBufObject* bufObject(NULL); + if ( aRequiredObject->Type().Length() > KSConHeaderMaxLength ) + { + LOGGER_WRITE("TypeHeader too big"); + return NULL; + } + if ( aRequiredObject->Name().Length() > KMaxFileName ) + { + LOGGER_WRITE("NameHeader is too long"); + return NULL; + } + TInt ret( KErrNone ); + TInt err( KErrNone ); + TBuf8 typeHeader( aRequiredObject->Type() ); + TrimRightSpaceAndNull( typeHeader ); + LOGGER_WRITE8_1("type: %S", &typeHeader); + LOGGER_WRITE_1("name: %S", &aRequiredObject->Name()); + + iBuffer->Reset(); + + delete iObject; + iObject = NULL; + + TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); + if ( err != KErrNone ) + { + return NULL; + } + + // Client requests folder listing + if ( typeHeader == KSConFolderListType ) + { + LOGGER_WRITE( "Client requests folder listning" ); + if ( !iFTPHandler ) + { + LOGGER_WRITE( "Creating iFTPHandler has failed" ); + return NULL; + } + + TRAP( err, ret = iFTPHandler->GetFolderObjectL( iObject ) ); + LOGGER_WRITE_1( "iFTPHandler->GetFolderObjectL() returned: %d", ret ); + if ( err == KErrNone && ret == KErrNone ) + { + bufObject = iObject; + } + else + { + LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : Leavecode returned %d", err ); + return NULL; + } + } + + // Client requests a file + else + { + if ( iFileObject ) + { + delete iFileObject; + iFileObject = NULL; + } + + TRAP( err, iFileObject = CObexFileObject::NewL() ); + if ( err != KErrNone ) + { + LOGGER_WRITE( "Creating iFileObject has failed" ); + return NULL; + } + iFileObject->Reset(); + TRAP( err, iFileObject->SetNameL( aRequiredObject->Name() ) ); + + if ( err == KErrNone ) + { + if ( !iFTPHandler ) + { + LOGGER_WRITE( "CSConFTPplugin::GetRequestIndication() Creating iFTPHandler has failed" ); + return NULL; + } + + TRAP( err, ret = + this->iFTPHandler->GetFileObjectL( iFileObject ) ); + LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : GetFileObjectL returned %d", ret ); + } + if ( err == KErrNone && ret == KErrNone ) + { + bufObject = (CObexBufObject*)iFileObject; + } + else + { + LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : Leavecode %d", err ); + return NULL; + } + } + if ( bufObject && iLinkAdapter.IsOpen() ) + { + // request active BT mode (high power mode) + err = iLinkAdapter.ActivateActiveRequester(); + LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); + } + return bufObject; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::GetPacketIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::GetPacketIndication() + { + TRACE_FUNC; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::GetCompleteIndication() +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::GetCompleteIndication() + { + TRACE_FUNC_ENTRY; + if ( iLinkAdapter.IsOpen() ) + { + // Cancel ActivateActiveRequester & allow going to low power mode + TInt err = iLinkAdapter.CancelLowPowerModeRequester(); + LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); + } + + TInt ret( KErrNone ); + if ( iFileObject ) + { + iFileObject->Reset(); + delete iFileObject; + iFileObject = NULL; + } + + LOGGER_WRITE_1( "CSConFTPplugin::GetCompleteIndication() : returned %d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, +// const TDesC8& aInfo ) +// MObexServerNotify implementation +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, + const TDesC8& /*aInfo*/ ) + { + TRACE_FUNC_ENTRY; + TInt ret( KErrNone ); + TInt err( KErrNone ); + + if ( !iFTPHandler ) + { + LOGGER_WRITE( "Creating iFTPHandler has failed" ); + return TFTPpluginUtils::ConvertFTPResponseCode( KErrNoMemory ); + } + + if ( aPathInfo.iFlags == KSConNULLSetPath ) + { + TRAP( err, ret = this->iFTPHandler->CreateFolderL( aPathInfo.iName ) ); + } + else + { + TRAP( err, ret = this->iFTPHandler->SetPathL( aPathInfo.iName, + aPathInfo.iFlags ) ); + } + + if ( err != KErrNone ) + { + LOGGER_WRITE_1( "CSConFTPplugin::SetPathIndication : returned %d", err ); + return TFTPpluginUtils::ConvertFTPResponseCode( err ); + } + LOGGER_WRITE_1( "CSConFTPplugin::SetPathIndication : returned %d", ret ); + return TFTPpluginUtils::ConvertFTPResponseCode( ret ); + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::TrimRightSpaceAndNull( TDes8& aDes ) const +// Removes spaces and nulls from the end of the string +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::TrimRightSpaceAndNull( TDes8& aDes ) const + { + TRACE_FUNC; + aDes.TrimRight(); + if ( aDes.Length() > 0 ) + { + if ( !aDes[aDes.Length() - 1] ) + { + aDes.SetLength( aDes.Length() - 1 ); + } + } + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::SetMediaType ( TSrcsMediaType aMediaType ) +// Current used transfer media (IR,USB,BT) +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::SetMediaType ( TSrcsMediaType aMediaType ) + { + TRACE_FUNC; + iMediaType = aMediaType; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::CSConFTPplugin() +// Constructor +// ----------------------------------------------------------------------------- +// +CSConFTPplugin::CSConFTPplugin() + { + TRACE_FUNC; + iBuffer = NULL; + iObject = NULL; + iFileObject = NULL; + iSessionActive = EFalse; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::ConstructL() +// Initializes member data +// ----------------------------------------------------------------------------- +// +void CSConFTPplugin::ConstructL() + { + TRACE_FUNC_ENTRY; + iBuffer = CBufFlat::NewL( KSConBufSize ); + iObject = CObexBufObject::NewL ( iBuffer ); + iServiceTimer = new (ELeave) CSConServiceTimer( this, KSConTimeOutValue ); + iServiceTimer->ConstructL(); + CActiveScheduler::Add( iServiceTimer ); + TRACE_FUNC_EXIT; + } + +// ----------------------------------------------------------------------------- +// CSConFTPplugin::SetObexServer( CObexServer* aObexServer ) +// SetObexServer +// ----------------------------------------------------------------------------- +// +TInt CSConFTPplugin::SetObexServer( CObexServer* aObexServer ) + { + iObexServer = aObexServer; + TInt ret = iObexServer->Start(this); + LOGGER_WRITE_1( "CSConFTPplugin::SetObexServer() ret: %d", ret ); + return ret; + } + +// End of file +