--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/testdriver/siptester/src/TCmdTransferFile.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,198 @@
+/*
+* 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
+*
+*/
+
+#include <f32file.h>
+#include <bautils.h>
+
+#include "CTcFileHandler.h"
+
+#include "TCmdTransferFile.h"
+#include "SIPConstants.h"
+#include "CTcSIPContext.h"
+
+// Literals used for action name
+_LIT8( KWrite, "write" );
+_LIT8( KDelete, "delete" );
+_LIT8( KExists, "exists" );
+
+
+/**
+ * INPUT:
+ * Headers: -
+ * Parameters: ActionName, *SrcPath, DestinationPath, *Data
+ * IDs: -
+ *
+ * OUTPUT:
+ * Parameters: StatusCode
+ * IDs: -
+ */
+void TCmdTransferFile::ExecuteL()
+ {
+ // -- Setup ---------------------------------------------------------------
+
+ // Get action name for operation (e.g. write&read)
+ TPtrC8 actionName = ExtractTextL( KParamActionName );
+
+ // Get parameter destination path
+ TPtrC8 sourcePath = ExtractTextL( KParamSourcePath, EFalse );
+
+ // Get parameter destination path
+ TPtrC8 destinationPath = ExtractTextL( KParamDestinationPath );
+
+ // Get actual data. Data parameter is having data in binary format.
+ TPtrC8 data = ExtractTextL( KParamData, EFalse );
+
+ // Extract content. Content parameter is having textual data.
+ HBufC8* content = ExtractHBufLC( KParamContent );
+ if ( !content )
+ {
+ // Create dummy zero length content
+ content = HBufC8::NewLC( 0 );
+ }
+
+
+ // -- Execution -----------------------------------------------------------
+
+ // Compare the operation and do it
+ if( !actionName.CompareC( KWrite ) )
+ {
+ if ( sourcePath.Compare( KNullDesC8 ) != 0 )
+ {
+ // If source path was defined copy file from sourcepath
+ // to destinationpath
+ DoCopyL( sourcePath, destinationPath );
+ }
+ else if ( content->Length() != 0 )
+ {
+ // Otherwise write received text data to destinationpath
+ TPtrC8 ptr(content->Right(content->Length()));
+ DoWriteL( destinationPath, ptr );
+ }
+ else if ( data.Compare( KNullDesC8 ) != 0 )
+ {
+ // Otherwise write received data to destinationpath
+ DoWriteL( destinationPath, data );
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+ else if( !actionName.CompareC( KExists ) )
+ {
+ TFileName filename;
+ filename.Copy(destinationPath);
+ if( CheckFileExists(filename) )
+ {
+ AddBooleanResponseL(_L8("FileExists"), ETrue);
+ }
+ else
+ {
+ AddBooleanResponseL(_L8("FileExists"), EFalse);
+ }
+ }
+ else if( !actionName.CompareC( KDelete ) )
+ {
+ TParse parse;
+ TFileName name;
+ name.Copy(destinationPath);
+ parse.Set(name, NULL, NULL);
+ if( parse.DrivePresent() && parse.PathPresent() && parse.NameOrExtPresent() )
+ {
+ iContext.FileHandler().DeleteFileL(destinationPath);
+ }
+ else
+ {
+ User::Leave( KErrArgument);
+ }
+ }
+ else { User::Leave( KErrNotSupported ); }
+
+ // -- Response creation ---------------------------------------------------
+
+ AddIntegerResponseL( KResponseActionReturnCode, KSIPReasonOk );
+ CleanupStack::Pop(1);
+ }
+
+
+TBool TCmdTransferFile::Match( const TTcIdentifier& aId )
+ {
+ return TTcSIPCommandBase::Match( aId, _L8("fileXfer") );
+ }
+
+TTcCommandBase* TCmdTransferFile::CreateL( MTcTestContext& aContext )
+ {
+ return new( ELeave ) TCmdTransferFile( aContext );
+ }
+
+void TCmdTransferFile::DoWriteL( TPtrC8& aDestinationPath, TPtrC8& aData )
+ {
+ // Use FileHandler server for writing since SIPTester cannot have access
+ // to /sys and /resource directories
+ iContext.FileHandler().CreateFileL( aDestinationPath, aData );
+ }
+
+void TCmdTransferFile::DoCopyL( TPtrC8& aSourcePath, TPtrC8& aDestinationPath )
+ {
+ iContext.FileHandler().CopyFileL( aSourcePath, aDestinationPath );
+ }
+
+TDesC8 TCmdTransferFile::DoReadL( TFileName& aDestinationPath )
+ {
+ // Read the document into a buffer.
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL( fs );
+
+ RFile in;
+ User::LeaveIfError( in.Open( fs, aDestinationPath,
+ EFileRead ) );
+ CleanupClosePushL( in );
+
+ //TBuf8< KTcRequestMaxLength > data; // 5120
+ //TBuf8< KTcResponseMaxLength > data; // 40960
+ TBuf8< 20 > data;
+ User::LeaveIfError( in.Read( data ) );
+
+ in.Close();
+ fs.Close();
+ CleanupStack::PopAndDestroy( 2 ); // in, fs
+
+ return data;
+ }
+
+TBool TCmdTransferFile::CheckFileExists(const TDesC& aFileName)
+ {
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL( fs );
+ TParse p;
+ // do isolated parse
+ User::LeaveIfError(p.Set(aFileName, NULL, NULL));
+
+ User::LeaveIfError(fs.Parse(aFileName, p));
+
+ TBool result = BaflUtils::FileExists(fs, aFileName);
+
+ fs.Close();
+ CleanupStack::PopAndDestroy( 1 );
+
+ if(result)
+ return ETrue;
+ else
+ return EFalse;
+ }