--- a/connectivitymodules/SeCon/plugins/pcconn/src/sconpcconnplugin.cpp Tue Feb 02 01:11:40 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1254 +0,0 @@
-/*
-* 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: PC Connectivity Plug-in implementation
-*
-*/
-
-
-// INCLUDE FILES
-
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <obexconstantsinternal.h>
-#endif
-#include "sconpcconnplugin.h"
-#include "sconftp.h"
-#include "sconpcconnpluginutils.h"
-#include "sconservicetimer.h"
-#include "catalogspcconnectivityplugin.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" );
-// Folder listing type from IrObex specification
-_LIT8( KSConCapabilityObjectType, "x-obex/capability" );
-// PCD types
-_LIT8( KSConPCDObjectType, "application/vnd.nokia.pcd" );
-_LIT8( KSConPCDXMLObjectType, "application/vnd.nokia.conml+xml" );
-_LIT8( KSConPCDWBXMLObjectType, "application/vnd.nokia.conml+wbxml" );
-_LIT8( KSConPCDXMLObjectType2, "application/vnd.nokia.pcd+xml" );
-_LIT8( KSConPCDWBXMLObjectType2, "application/vnd.nokia.pcd+wbxml" );
-_LIT( K_C_ROOT, "C:\\" );
-
-// PCD header commands
-const TInt KSCon_PCD_TAG = 0x003A;
-const TInt KSCon_PCD_CMD_COPY = 0x0037;
-const TInt KSCon_PCD_CMD_MOVE_OR_RENAME = 0x0038;
-const TInt KSCon_PCD_CMD_SET_PERMISSION = 0x0039;
-// PCD header parameters
-const TInt KSCon_PCD_PAR_FULL_PERMISSION = 0x0040;
-const TInt KSCon_PCD_PAR_READ_ONLY_PERMISSION = 0x0041;
-
-
-const TInt KSConBufSize = 262144; // 256KB
-// Time (in milliseconds) for the timer
-const TInt KSConTimeOutValue = 180000000;
-// Flags used to indicate SetPath commands
-const TInt KSConNULLSetPath = 0x00;
-
-const TInt KSConHeaderMaxLength = 256;
-
-// ============================= MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::NewL()
-// Two-phase constructing
-// -----------------------------------------------------------------------------
-//
-CSConPCConnplugin* CSConPCConnplugin::NewL()
- {
- TRACE_FUNC_ENTRY;
- CSConPCConnplugin* self = new ( ELeave ) CSConPCConnplugin();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- TRACE_FUNC_EXIT;
- return( self );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::~CSConPCConnplugin()
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CSConPCConnplugin::~CSConPCConnplugin()
- {
- TRACE_FUNC_ENTRY;
-
- // Disconnect from services.
- Disconnect();
-
- delete iBuffer;
- iBuffer = NULL;
-
- if ( iServiceTimer )
- {
- iServiceTimer->Cancel();
- }
-
- delete iServiceTimer;
- iServiceTimer = NULL;
-
- delete iCatalogs;
- iCatalogs = NULL;
- delete iCatalogsMimeType;
- iCatalogsMimeType = NULL;
-
- iMimeArray.Reset();
- iMimeArray.Close();
-
- delete iShutdownWatcher;
- iShutdownWatcher = NULL;
-
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::IsOBEXActive()
-// Returns active status of OBEX session
-// -----------------------------------------------------------------------------
-//
-TBool CSConPCConnplugin::IsOBEXActive()
- {
- TRACE_FUNC;
- return iSessionActive;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::NotifyShutdown()
-// System is shutting down
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::NotifyShutdown()
- {
- TRACE_FUNC;
- iShutdownInProgress = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::LoadFTPDllL()
-// Loads sconftp.dll module
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::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;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::Disconnect()
-// Closes initialized services
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::Disconnect()
- {
- TRACE_FUNC_ENTRY;
-
- iLinkAdapter.Close();
- iSocketServer.Close();
-
- //Disconnect from server
- iPCConnSession.Close();
- iPCConnSessionConnected = EFalse;
-
- if ( iStartTimer != EFalse )
- {
- iServiceTimer->Cancel();
- iServiceTimer->StartTimer();
- }
-
- delete iObject;
- iObject = NULL;
-
- if ( iFTPHandler )
- {
- delete iFTPHandler;
- iFTPHandler = NULL;
- iFTPlib.Close();
- }
- if ( iFileObject )
- {
- delete iFileObject;
- iFileObject = NULL;
- }
- if ( iCatalogsConnected )
- {
- iCatalogs->Close();
- iCatalogsConnected = EFalse;
- iCatalogsMimeTypesExist = EFalse;
- }
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::ErrorIndication( TInt aError )
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::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;
- }
-
- if ( iPCConnSessionConnected )
- {
- iPCConnSession.ResetServer();
- }
-
- // Keep compiler happy
- (void)aError;
-
- 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;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::AbortIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::AbortIndication()
- {
- TRACE_FUNC_ENTRY;
-
- if ( iFTPHandler )
- {
- iFTPHandler->AbortFileTransfer( iObject );
- }
-
- if ( iObject )
- {
- delete iObject;
- iObject = NULL;
- }
-
- if ( iFileObject )
- {
- iFileObject->Reset();
- delete iFileObject;
- iFileObject = NULL;
- }
-
- if ( iPCConnSessionConnected )
- {
- iPCConnSession.ResetServer();
- }
-
- 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;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::TransportUpIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::TransportUpIndication()
- {
- TRACE_FUNC;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::ObexConnectIndication( const TObexConnectInfo&
-// aRemoteInfo, const TDesC8& aInfo )
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::ObexConnectIndication( const TObexConnectInfo&
- /*aRemoteInfo*/, const TDesC8& /*aInfo*/ )
- {
- TRACE_FUNC_ENTRY;
- TInt err( KErrNone );
- TInt catalogsErr( 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;
- }
-
- //Connect to server
- if ( !iPCConnSessionConnected )
- {
- LOGGER_WRITE("Try to connect to iPCConnSession");
- err = iPCConnSession.Connect();
- LOGGER_WRITE_1( "iPCConnSession.Connect returned : %d", err );
- if ( err == KErrNone )
- {
- iPCConnSessionConnected = ETrue;
- }
- }
-
- if ( err == KErrNone && !iFTPHandler )
- {
- TRAP( err, LoadFTPDllL() );
- LOGGER_WRITE_1( "LoadFTPDllL returned : %d", err );
- }
-
- if ( err == KErrNone )
- {
- iFTPHandler->SetProfile( EProprietary );
- LOGGER_WRITE( "iServiceTimer->StopTimer()" );
- iServiceTimer->Cancel();
- iServiceTimer->StopTimer();
- }
-
- if ( !iCatalogsConnected )
- {
- LOGGER_WRITE( "CSConPCConnplugin::ObexConnectIndication() before iCatalogs->Connect()" );
- catalogsErr = iCatalogs->Connect();
- LOGGER_WRITE_1( "CSConPCConnplugin::ObexConnectIndication() iCatalogs->Connect() err: %d", catalogsErr );
- if ( catalogsErr == KErrNone )
- {
- LOGGER_WRITE( "CSConPCConnplugin::ObexConnectIndication() iCatalogs->Connect() success" );
- iCatalogsConnected = ETrue;
- TRAPD( ret, iMimeArray = iCatalogs->SupportedMimeTypesL() );
- if ( ret == KErrNone )
- {
- LOGGER_WRITE_1( "iCatalogs->SupportedMimeTypesL count: %d", iMimeArray.Count() );
- iCatalogsMimeTypesExist = ETrue;
- }
- }
- }
- TRACE_FUNC_EXIT;
- return TPCConnpluginUtils::ConvertFTPResponseCode( err );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::ObexDisconnectIndication( const TDesC8& )
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::ObexDisconnectIndication( const TDesC8& )
- {
- TRACE_FUNC_ENTRY;
- Disconnect();
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::TransportDownIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::TransportDownIndication()
- {
- TRACE_FUNC_ENTRY;
- Disconnect();
- if ( iBuffer )
- {
- iBuffer->Reset();
- }
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::PutRequestIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-CObexBufObject* CSConPCConnplugin::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 );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::PutPacketIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::PutPacketIndication()
- {
- TRACE_FUNC_ENTRY;
- TInt ret( KErrNone );
-
- TBool catalogsMime( EFalse );
- if ( iObject->Type().Length() > KSConHeaderMaxLength )
- {
- LOGGER_WRITE("TypeHeader too big, return KErrNotSupported");
- return TPCConnpluginUtils::ConvertFTPResponseCode( KErrNotSupported );
- }
- TBuf8<KSConHeaderMaxLength> typeHeader( iObject->Type() );
- TrimRightSpaceAndNull( typeHeader );
-
- if ( iCatalogsConnected && IsCatalogsMimeType( TDataType( typeHeader ) ) )
- {
- catalogsMime = ETrue;
- }
-
- if ( (TInt)iObject->Length() > 0
- && typeHeader != KSConPCDWBXMLObjectType
- && typeHeader != KSConPCDWBXMLObjectType2
- && !catalogsMime
- && typeHeader != KSConPCDObjectType )
- {
- // normal file transfer
- 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( "CSConPCConnplugin::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( "CSConPCConnplugin::PutPacketIndication() filesize %d", filesize );
- LOGGER_WRITE_1( "CSConPCConnplugin::PutPacketIndication() iObject->BytesReceived() %d", iObject->BytesReceived() );
- if ( filesize > iObject->BytesReceived() )
- {
- LOGGER_WRITE( "CSConPCConnplugin::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( "CSConPCConnplugin::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( "CSConPCConnplugin::PutPacketIndication(): ret %d", ret );
- return TPCConnpluginUtils::ConvertFTPResponseCode( ret );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::PutCompleteIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::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 );
- }
-
- if ( iObject->Type().Length() > KSConHeaderMaxLength )
- {
- LOGGER_WRITE("TypeHeader too big, return KErrNotSupported");
- delete iObject;
- iObject = NULL;
-
- iFTPHandler->DeleteTempFile();
- return TPCConnpluginUtils::ConvertPCDResponseCode( KErrNotSupported );
- }
- if ( iObject->Name().Length() > KSConHeaderMaxLength )
- {
- LOGGER_WRITE("NameHeader too big, return KErrNotSupported");
- delete iObject;
- iObject = NULL;
-
- iFTPHandler->DeleteTempFile();
- return TPCConnpluginUtils::ConvertPCDResponseCode( KErrNotSupported );
- }
-
- // check if ConML signal is received
- TBuf8<KSConHeaderMaxLength> typeHeader( iObject->Type() );
- TBuf<KSConHeaderMaxLength> nameHeader( iObject->Name() );
- TrimRightSpaceAndNull( typeHeader );
- LOGGER_WRITE8_1("type: %S", &typeHeader);
- LOGGER_WRITE_1("name: %S", &nameHeader);
- LOGGER_WRITE_1("description: %S", &iObject->Description());
- TInt size = iObject->BytesReceived();
- TTime time = iObject->Time();
-
- // shutdownWatcher is not needed anymore
- delete iShutdownWatcher;
- iShutdownWatcher = NULL;
-
- if ( IsCatalogsMimeType( TDataType( typeHeader ) ) )
- {
- if ( iCatalogsConnected )
- {
- LOGGER_WRITE( "iCatalogs->PutDataL" );
- TRAP( err, iCatalogs->PutDataL( typeHeader, *iBuffer ) );
- LOGGER_WRITE_1( "iCatalogs->PutDataL : %d", err );
- if ( err == KErrServerTerminated )
- {
- err = iCatalogs->Connect();
- LOGGER_WRITE_1( "CSConPCConnplugin::PutCompleteIndication() iCatalogs->Connect() err: %d", err );
- if ( err == KErrNone )
- {
- LOGGER_WRITE( "iCatalogs->PutDataL" );
- TRAP( err, iCatalogs->PutDataL( typeHeader, *iBuffer ) );
- LOGGER_WRITE_1( "iCatalogs->PutDataL : %d", err );
- }
- }
- }
- else
- {
- LOGGER_WRITE( "Catalogs mime type recognised - failing due no connection" );
- err = KErrNotSupported;
- }
-
- delete iObject;
- iObject = NULL;
-
- iFTPHandler->DeleteTempFile();
- return TPCConnpluginUtils::ConvertPCDResponseCode( err );
- }
-
- if ( typeHeader == KSConPCDObjectType )
- {
- LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication KSConPCDObjectType" );
- err = HandlePCDObjectPut( iObject->Description(), iObject->Name() );
- delete iObject;
- iObject = NULL;
-
- iFTPHandler->DeleteTempFile();
- LOGGER_WRITE_1( "CSConPCConnplugin::PutCompleteIndication() end, err: %d", err );
- return TPCConnpluginUtils::ConvertObexMoveResponseCode( err );
- }
-
- if ( typeHeader != KSConPCDWBXMLObjectType &&
- typeHeader != KSConPCDWBXMLObjectType2 )
- {
- TObexHeaderMask validHdrs = iObject->ValidHeaders();
- if ( ( validHdrs & KObexHdrBody ) || ( validHdrs & KObexHdrEndOfBody ) )
- {
- LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication() normal filetransfer" );
- LOGGER_WRITE_1( "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 = iFTPHandler->PutFileObjectFinalizeL( iObject ) );
- LOGGER_WRITE_1( "PutFileObjectL() returned : %d", ret );
- }
- else
- {
- LOGGER_WRITE( "Delete starts" );
- TRAP( ret, err = iFTPHandler->DeleteObjectL( iObject->Name() ) );
- LOGGER_WRITE_1( "DeleteObjectL() returned : %d", ret );
- }
- }
-
- delete iObject;
- iObject = NULL;
-
- if ( typeHeader == KSConPCDWBXMLObjectType ||
- typeHeader == KSConPCDWBXMLObjectType2 )
- {
- LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication() ReadWBXMLDataL" );
- TRAP( ret, err = iFTPHandler->ReadWBXMLDataL( iBuffer ) );
-
- if ( err == KErrNone && ret == KErrNone )
- {
- TRAP( ret, err = iPCConnSession.PutPacketL( nameHeader,
- typeHeader, iBuffer ) );
- LOGGER_WRITE_1( "iPCConnSession.PutPacketL() leaveCode : %d", ret );
- LOGGER_WRITE_1( "iPCConnSession.PutPacketL() returned : %d", err );
- }
-
- iFTPHandler->DeleteTempFile();
-
- return TPCConnpluginUtils::ConvertPCDResponseCode( err );
- }
-
- iFTPHandler->DeleteTempFile();
-
- TRACE_FUNC_EXIT;
- if ( ret != KErrNone )
- {
- return TPCConnpluginUtils::ConvertFTPResponseCode( ret );
- }
- return TPCConnpluginUtils::ConvertFTPResponseCode( err );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::GetRequestIndication( CObexBaseObject* aRequiredObject )
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-CObexBufObject* CSConPCConnplugin::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<KSConHeaderMaxLength> 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
- {
- return NULL;
- }
- }
- // Client requests capability object or ConML packet
- else if ( typeHeader == KSConCapabilityObjectType
- || typeHeader == KSConPCDWBXMLObjectType
- || typeHeader == KSConPCDWBXMLObjectType2)
- {
- LOGGER_WRITE( "Client requests capability object or ConML packet" );
- // HandleGetPCConnObjectL will set some data to iObject, or leaves if error occurs
- TRAP( err, HandleGetPCConnObjectL( aRequiredObject->Name(), typeHeader ) );
-
- if ( err == KErrNone )
- {
- bufObject = iObject;
- }
- else
- {
- LOGGER_WRITE_1("Get PCConn object failed, err: %d", err);
- return NULL;
- }
- }
- // Client requests file conversion
- else if ( typeHeader == KSConPCDObjectType )
- {
- LOGGER_WRITE("request of KSConPCDObjectType is not supported.")
- return NULL;
- }
- // catalogs
- else if ( IsCatalogsMimeType( TDataType( typeHeader ) ) )
- {
- TRAP( err, HandleGetCatalogsObjectL( typeHeader ) );
- if ( err == KErrNone )
- {
- bufObject = iObject;
- }
- else
- {
- LOGGER_WRITE_1("Get catalogs object failed, err: %d", err);
- return NULL;
- }
- }
- // Client requests file
- else
- {
- LOGGER_WRITE( "Client requests file" );
- TRAP( err, HandleGetFileObjectL( aRequiredObject->Name() ) );
- if ( err == KErrNone )
- {
- bufObject = (CObexBufObject*)iFileObject;
- }
- else
- {
- LOGGER_WRITE_1("Get file object failed, err: %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;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::GetPacketIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::GetPacketIndication()
- {
- TRACE_FUNC;
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::GetCompleteIndication()
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::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( "CSConPCConnplugin::GetCompleteIndication() : returned %d", ret );
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo,
-// const TDesC8& aInfo )
-// MObexServerNotify implementation
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::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 TPCConnpluginUtils::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( "CSConPCConnplugin::SetPathIndication : returned %d", err );
- return TPCConnpluginUtils::ConvertFTPResponseCode( err );
- }
- LOGGER_WRITE_1( "CSConPCConnplugin::SetPathIndication : returned %d", ret );
- return TPCConnpluginUtils::ConvertFTPResponseCode( ret );
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::TrimRightSpaceAndNull( TDes8& aDes ) const
-// Removes spaces and nulls from the end of the string
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::TrimRightSpaceAndNull( TDes8& aDes ) const
- {
- TRACE_FUNC;
- aDes.TrimRight();
- if ( aDes.Length() > 0 )
- {
- if ( !aDes[aDes.Length() - 1] )
- {
- aDes.SetLength( aDes.Length() - 1 );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::SetMediaType( TSrcsMediaType aMediaType )
-// Current used transfer media (IR,USB,BT)
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::SetMediaType( TSrcsMediaType aMediaType )
- {
- TRACE_FUNC;
- iMediaType = aMediaType;
- }
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::TBool IsCatalogsMimeType( TDataType aMime )
-// Checks if mime type belogs to Catalogs
-// -----------------------------------------------------------------------------
-//
-TBool CSConPCConnplugin::IsCatalogsMimeType( TDataType aMime )
- {
- TRACE_FUNC_ENTRY;
- TBool result = EFalse;
-
- if ( !iCatalogsConnected
- && aMime.Des8() != KSConPCDObjectType
- && aMime.Des8() != KSConPCDXMLObjectType
- && aMime.Des8() != KSConPCDWBXMLObjectType
- && aMime.Des8() != KSConPCDXMLObjectType2
- && aMime.Des8() != KSConPCDWBXMLObjectType2
- )
- {
- // Catalogs never connected and not secon mime type
- // Try to connect to catalogs to get catalogstypes
- TInt catalogsErr = iCatalogs->Connect();
- LOGGER_WRITE_1( "CSConPCConnplugin::IsCatalogsMimeType() iCatalogs->Connect() err: %d", catalogsErr );
- if ( catalogsErr == KErrNone )
- {
- LOGGER_WRITE( "CSConPCConnplugin::IsCatalogsMimeType() iCatalogs->Connect() success" );
- iCatalogsConnected = ETrue;
- TRAPD( ret, iMimeArray = iCatalogs->SupportedMimeTypesL() );
- if ( ret == KErrNone )
- {
- LOGGER_WRITE_1( "iCatalogs->SupportedMimeTypesL count: %d", iMimeArray.Count() );
- iCatalogsMimeTypesExist = ETrue;
- }
- }
- }
-
- if ( iCatalogsMimeTypesExist )
- {
- // Compare to supported values
- for ( TInt j = 0; j < iMimeArray.Count(); j++ )
- {
- if ( (*iMimeArray[j]) == aMime )
- {
- LOGGER_WRITE( "CSConPCConnplugin::IsCatalogsMimeTypeL returns TRUE" );
- result = ETrue;
- break;
- }
- }
- }
- TRACE_FUNC_EXIT;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::CSConPCConnplugin()
-// Default constructor
-// -----------------------------------------------------------------------------
-//
-CSConPCConnplugin::CSConPCConnplugin()
- {
- TRACE_FUNC;
- iBuffer = NULL;
- iObject = NULL;
- iFileObject = NULL;
- iSessionActive = EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::ConstructL()
-// Initializes member data
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::ConstructL()
- {
- TRACE_FUNC_ENTRY;
- iBuffer = CBufFlat::NewL( KSConBufSize );
- iObject = CObexBufObject::NewL ( iBuffer );
- iServiceTimer = new (ELeave) CSConServiceTimer( this, KSConTimeOutValue );
- iServiceTimer->ConstructL();
- CActiveScheduler::Add( iServiceTimer );
-
- // catalogs
- iCatalogs = CCatalogsPCConnectivityPlugin::NewL();
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::SetObexServer( CObexServer* aObexServer )
-// SetObexServer
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::SetObexServer( CObexServer* aObexServer )
- {
- iObexServer = aObexServer;
- TInt ret = iObexServer->Start(this);
- LOGGER_WRITE_1( "CSConPCConnplugin::SetObexServer() ret: %d", ret );
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::HandlePCDObjectPut
-// Handles PCD object. Used for advanced file handling.
-// -----------------------------------------------------------------------------
-//
-TInt CSConPCConnplugin::HandlePCDObjectPut( const TDesC& aDescriptionHeader,
- const TDesC& aNameHeader )
- {
- TRACE_FUNC_ENTRY;
- TInt err( KErrNotSupported);
- if ( aDescriptionHeader.Length() >= 3 )
- {
- TInt commandTag = aDescriptionHeader[0];
- TInt commandID = aDescriptionHeader[1];
- TInt commandParam1 = aDescriptionHeader[2];
-
- TPtrC destination;
- if ( aDescriptionHeader.Length() >= 3 )
- {
- destination.Set( aDescriptionHeader.Mid(3) );
- }
- TPtrC source;
- if ( aNameHeader.Length() >= 1 )
- {
- // remove ":" character from beginning
- source.Set( aNameHeader.Mid(1) );
- }
-
- if ( commandTag == KSCon_PCD_TAG )
- {
- LOGGER_WRITE( "CSConPCConnplugin::HandlePCDObjectPut KSCon_PCD_TAG found" );
- switch (commandID)
- {
- case KSCon_PCD_CMD_COPY:
- err = iFTPHandler->CopyFile( source, destination );
- break;
-
- case KSCon_PCD_CMD_MOVE_OR_RENAME:
- err = iFTPHandler->MoveFile( source, destination );
- break;
-
- case KSCon_PCD_CMD_SET_PERMISSION:
- if ( commandParam1 == KSCon_PCD_PAR_FULL_PERMISSION )
- {
- err = iFTPHandler->SetReadOnly( source, EFalse );
- }
- else if ( commandParam1 == KSCon_PCD_PAR_READ_ONLY_PERMISSION )
- {
- err = iFTPHandler->SetReadOnly( source, ETrue );
- }
- else
- {
- err = KErrNotSupported;
- }
- break;
-
- default:
- LOGGER_WRITE( "CSConPCConnplugin::HandlePCDObjectPut unknown commandID" );
- err = KErrNotSupported;
- break;
- }
-
- }
-
- }
- TRACE_FUNC_EXIT;
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::HandleGetPCConnObjectL
-// Get Capbility object or ConML message from PCConnServer
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::HandleGetPCConnObjectL( const TDesC& aNameHeader,
- const TDesC8& aTypeHeader )
- {
- TRACE_FUNC_ENTRY;
- if ( !iPCConnSessionConnected )
- {
- LOGGER_WRITE( "ERROR, iPCConnSession was not connected" );
- User::Leave( KErrNotReady );
- }
- TInt err = iPCConnSession.GetPacketL( aNameHeader, aTypeHeader, iBuffer );
- LOGGER_WRITE_1( "iPCConnSession.GetPacketL() returned: %d", err );
- User::LeaveIfError( err );
- iObject->SetDataBufL( iBuffer );
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::HandleGetCatalogsObjectL
-// Get Catalogs object
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::HandleGetCatalogsObjectL( const TDesC8& aTypeHeader )
- {
- TRACE_FUNC_ENTRY;
- TInt err(KErrNone);
- if ( !iCatalogsConnected )
- {
- LOGGER_WRITE( "catalogs mime type recognised - failing due to no connection" );
- User::Leave( KErrNotReady );
- }
- else
- {
- LOGGER_WRITE( "iCatalogs->GetDataL" );
- TDataType mime( aTypeHeader );
- TRAP( err, iCatalogs->GetDataL( mime, *iBuffer ) );
- LOGGER_WRITE_1( "iCatalogs->GetDataL : %d", err );
- if ( err == KErrServerTerminated )
- {
- // server was terminated, try to reconnect
- err = iCatalogs->Connect();
- LOGGER_WRITE_1( "iCatalogs->Connect() err: %d", err );
- User::LeaveIfError( err );
- LOGGER_WRITE( "iCatalogs->GetDataL" );
- iCatalogs->GetDataL( mime, *iBuffer );
- }
- }
- User::LeaveIfError( err );
- iObject->SetDataBufL( iBuffer );
- TRACE_FUNC_EXIT;
- }
-
-// -----------------------------------------------------------------------------
-// CSConPCConnplugin::HandleGetFileObjectL
-// Get file object
-// -----------------------------------------------------------------------------
-//
-void CSConPCConnplugin::HandleGetFileObjectL( const TDesC& aNameHeader )
- {
- TRACE_FUNC_ENTRY;
- delete iFileObject;
- iFileObject = NULL;
- iFileObject = CObexFileObject::NewL();
-
- iFileObject->Reset();
- iFileObject->SetNameL( aNameHeader );
-
- if ( !iFTPHandler )
- {
- LOGGER_WRITE( "Creating iFTPHandler has failed" );
- User::Leave( KErrNotReady );
- }
-
- TInt err = iFTPHandler->GetFileObjectL( iFileObject );
- User::LeaveIfError( err );
- TRACE_FUNC_EXIT;
- }
-
-// End of file