applayerprotocols/ftpengine/ftptest/FTPTST02.CPP
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/ftpengine/ftptest/FTPTST02.CPP	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,454 @@
+// Copyright (c) 1998-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:
+// Author: Philippe Gabriel
+// A simple test program which uses the statically linked dll  "ftpprot.dll"
+// 
+//
+
+// standard example header
+#include "DEBUG.H"
+#include <e32base.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <ftpsess.h>
+#include "FTPTEST.H"
+
+TBuf8<955> myBuffer8;
+TBuf<2000> myBuffer;
+TInt	total;
+
+#define __CONSOLE_OUTPUT__
+
+#define __FILERETR_TESTS__
+//#define __IPV4_TESTS__
+//#define __IPV6_TESTS__
+
+class TFtpTest02Params
+	{
+public:
+	void SetParams(const TDesC& aInetAddr, TUint aPort, const TDesC& aHostName,
+		const TDesC8& aUserName, const TDesC8& aPassword, const TDesC8& aDirectoryPath,
+		const TDesC8& aRemoteFileName, const TDesC& aLocalFileName);
+public:
+	TInetAddr iInetAddr;
+	TUint iPort;
+	THostName iHostName;
+	TPtrC8 iUserName;
+	TPtrC8 iPassword;
+	TPtrC8 iDirectoryPath;
+	TPtrC8 iRemoteFileName;
+	TPtrC iLocalFileName;
+	};
+
+void TFtpTest02Params::SetParams(const TDesC& aInetAddr, TUint aPort, const TDesC& aHostName,
+		const TDesC8& aUserName, const TDesC8& aPassword, const TDesC8& aDirectoryPath,
+		const TDesC8& aRemoteFileName, const TDesC& aLocalFileName)
+	{
+	iInetAddr.Input(aInetAddr);
+	iInetAddr.SetPort(aPort);
+	iPort=aPort;
+	iHostName=aHostName;
+	iUserName.Set(aUserName);
+	iDirectoryPath.Set(aDirectoryPath);
+	iPassword.Set(aPassword);
+	iRemoteFileName.Set(aRemoteFileName);
+	iLocalFileName.Set(aLocalFileName);
+	}
+
+//
+
+class CFtpTest02 : public CBase, public MFtpSessionNotifier
+	{
+public:
+	static CFtpTest02* NewL();
+	~CFtpTest02();
+	void DoTest();
+	void TestMain();
+	void StartScheduler();
+	void StopSchedulerIfNecessary();
+
+	void Complete(void);
+	// Operation completed, more data to follow
+	void MoreData(void);
+	// Transfer Progress report
+	void TransferProgress(TUint aProgress);
+	// User canceled ongoing operation
+	void Cancel(void);
+	// Peer reset the connection
+	void ConnReset(void);
+	// Connection error
+	void ConnectionError(TOpComp aTConnectionError);
+	// FTP server does not implement the operation requested
+	void OperationNotSupported(void);
+	// Local File system error
+	void LocalFileSystemError(TOpComp aTLocalFileSystemError);
+	// Remote File system error
+	void RemoteFileSystemError(TOpComp aTRemoteFileSystemError);
+	// Not specified yet
+	void EUnknownError();
+	// Message reported by server
+	void ServerMessage(const TDesC8&);
+
+	void ListTest();
+	void RestartTest();
+	void FailedRetrievalTest();
+    void FailedRetrievalTestOverwrite();
+	void RetriveveTestOverwrite();
+	void RenameTest();
+	void DeleteFileTest();
+	void StoreTest();
+	void DirectoryTest();
+
+protected:
+	CFtpTest02();
+private:
+	CFTPSession* iCFTPSession;
+	TFtpTest02Params iTestParams;
+	TBool iSchedulerStarted;
+	};	
+
+CFtpTest02* CFtpTest02::NewL()
+	{
+	CFtpTest02* self = new(ELeave) CFtpTest02();
+	CleanupStack::PushL(self);
+	self->iCFTPSession = CFTPSession::NewL(self);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CFtpTest02::CFtpTest02()
+{}
+
+CFtpTest02::~CFtpTest02()
+	{
+	delete iCFTPSession;
+	}
+
+void CFtpTest02::StartScheduler()
+	{
+	iSchedulerStarted=ETrue;
+	CActiveScheduler::Start();
+	}
+
+void CFtpTest02::StopSchedulerIfNecessary()
+	{
+	if(iSchedulerStarted)
+		CActiveScheduler::Stop();
+	iSchedulerStarted=EFalse;
+	}
+
+void CFtpTest02::ServerMessage(const TDesC8& aMessage)
+	{
+	myBuffer.Copy(aMessage);
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(myBuffer);
+#endif
+
+	FTPPROTDEBUG(0xffff,myBuffer);
+	}
+
+void CFtpTest02::TransferProgress(TUint aProgress)
+	{
+	total += aProgress;
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Printf(_L("CFtpTest02::TransferProgress total:>%d< Packet:>%d<\n"),total,aProgress);
+#endif
+
+	FTPPROTDEBUG3(0xffff, _L("CFtpTest02::TransferProgress total:>%d< Packet:>%d<\n"),total,aProgress);
+
+	}
+
+void CFtpTest02::Complete(void)
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::Complete\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("CFtpTest02::Complete\n"));
+	StopSchedulerIfNecessary();
+	}
+
+void CFtpTest02::Cancel(void){}
+
+void CFtpTest02::ConnReset(void)
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::ConnReset\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("CFtpTest02::ConnReset\n"));
+	StopSchedulerIfNecessary();
+	}
+
+void CFtpTest02::ConnectionError(TOpComp /*aTConnectionError*/)
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::ConnectionError\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("CFtpTest02::ConnectionError\n"));
+	StopSchedulerIfNecessary();
+	}
+
+void CFtpTest02::OperationNotSupported(void){}
+
+void CFtpTest02::LocalFileSystemError(TOpComp /*aTLocalFileSystemError*/)
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::LocalFileSystemError\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("CFtpTest02::LocalFileSystemError\n"));
+	StopSchedulerIfNecessary();
+	}
+
+void CFtpTest02::RemoteFileSystemError(TOpComp /*aTRemoteFileSystemError*/)
+	{
+	StopSchedulerIfNecessary();
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::RemoteFileSystemError\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("CFtpTest02::RemoteFileSystemError\n"));
+	}
+
+void CFtpTest02::EUnknownError(void)
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("Test02Notifier::EUnknownError\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff, _L("Test02Notifier::EUnknownError\n"));
+	StopSchedulerIfNecessary();
+	}
+
+void CFtpTest02::MoreData(void)	
+	{
+#ifdef __CONSOLE_OUTPUT__
+	__FTPDebugConsole->Write(_L("CFtpTest02::Notification called EPacketReceived\n"));
+	__FTPDebugConsole->Write(_L("----------Packet from DTP Channel---------\n"));
+	__FTPDebugConsole->Write(myBuffer);
+	__FTPDebugConsole->Write(_L("\n----------End of Packet from DTP Channel---------\n"));
+#endif
+
+	FTPPROTDEBUG(0xffff,_L("CFtpTest02::Notification called EPacketReceived\n"));
+	FTPPROTDEBUG(0xffff,_L("----------Packet from DTP Channel---------\n"));
+	FTPPROTDEBUG(0xffff,myBuffer);
+	FTPPROTDEBUG(0xffff,_L("\n----------End of Packet from DTP Channel---------\n"));
+
+	iCFTPSession->ListDirectory(_L8(""),myBuffer8);
+	return;
+	}
+
+
+
+LOCAL_C void doExampleL()
+    {
+
+	CActiveScheduler* exampleScheduler=new (ELeave) CActiveScheduler;
+    CleanupStack::PushL(exampleScheduler);
+    CActiveScheduler::Install(exampleScheduler);
+
+	CFtpTest02* myFtpTest02 = CFtpTest02::NewL();
+	CleanupStack::PushL(myFtpTest02);
+
+#ifdef __IPV4_TESTS__
+	__FTPDebugConsole->Printf(_L("FTP Test 02 Ipv4 \n\n"));
+#else
+#ifdef __FILERETR_TESTS__
+	__FTPDebugConsole->Printf(_L("FTP Test 02 File retreive \n\n"));
+#else
+	__FTPDebugConsole->Printf(_L("FTP Test 02 Ipv6 \n\n"));
+#endif
+#endif
+
+	__FTPDebugConsole->Printf(_L("FTP Session client \n\n"));
+
+	myFtpTest02->TestMain();
+
+	__FTPDebugConsole->Printf(_L("Finished test\n"));
+
+	CleanupStack::PopAndDestroy(myFtpTest02);
+	CleanupStack::PopAndDestroy(exampleScheduler);
+	}
+
+void CFtpTest02::TestMain()
+	{
+#ifdef __IPV4_TESTS__
+	iTestParams.SetParams(_L("207.46.133.140"), 21, _L("ftp.microsoft.com"),		//params for microsoft ftp site
+		_L8("anonymous"), _L8("philippe@symbian.com"), _L8("misc"), _L8("index.txt"),
+		_L("index.txt"));
+	DoTest();
+
+	iTestParams.SetParams(_L("192.18.99.73"), 21, _L("ftp.sun.com"),
+		_L8("anonymous"), _L8("karl.mcdowall@symbian.com"), _L8("/"), _L8("swec.dat"),
+		_L("swec.dat"));
+	DoTest();
+#endif
+
+#ifdef __FILERETR_TESTS__
+	iTestParams.SetParams(_L("10.16.113.6"), 21, _L("ftp-images"),
+		_L8("roms"), _L8("integrator"), _L8("/"), _L8("psdagt_udeb.htm"),
+		_L("psdagt_udeb.htm"));
+
+	iCFTPSession->Connect(iTestParams.iInetAddr,iTestParams.iUserName,	//Login using passive mode
+		iTestParams.iPassword,CFTPSession::Epassive);
+	StartScheduler();
+
+	RetriveveTestOverwrite();
+	FailedRetrievalTestOverwrite();
+	FailedRetrievalTest();
+
+    iCFTPSession->Close();
+	StartScheduler();
+#endif
+
+#ifdef __IPV6_TESTS__
+	iTestParams.SetParams(_L("2001:618:400:6a:2c0:4fff:fe8a:a918"),	//params for snus6
+		21, _L("snus6.intra6"),  _L8("karlm"), _L8("karlm"),
+		_L8("/usr/home/karlm"), _L8("test.cpp"), _L("test.cpp"));
+	DoTest();
+
+	iTestParams.SetParams(_L("2001:618:400:6a:210:5aff:febf:531"),	//params for 6pack6
+		21, _L("6pack6.intra6"), _L8("anonymous"), _L8("karlm"),
+		_L8("/usr"), _L8("anything"), _L("anything"));
+	DoTest();
+#endif
+	}
+
+void CFtpTest02::DoTest()
+	{
+//Removed teporarily due to problem with host resolution
+//	iCFTPSession->Connect(iTestParams.iHostName,iTestParams.iUserName,	//Login using hostname
+//		iTestParams.iPassword,CFTPSession::EActive,iTestParams.iPort);	
+//	StartScheduler();
+//	iCFTPSession->Close();
+//	StartScheduler();
+
+	iCFTPSession->Connect(iTestParams.iInetAddr,iTestParams.iUserName,	//Login using Active mode
+		iTestParams.iPassword,CFTPSession::EActive);
+	StartScheduler();
+	iCFTPSession->Close();
+	StartScheduler();
+
+	iCFTPSession->Connect(iTestParams.iInetAddr,iTestParams.iUserName,	//Login using passive mode
+		iTestParams.iPassword,CFTPSession::Epassive);
+	StartScheduler();
+
+	iCFTPSession->ChangeDirectory(iTestParams.iDirectoryPath);			//Move to appropriate directory.
+	StartScheduler();
+	
+	ListTest();
+	RetriveveTestOverwrite();
+	FailedRetrievalTest();
+	FailedRetrievalTestOverwrite();
+	RenameTest();
+	DeleteFileTest();
+	StoreTest();
+	RestartTest();
+	DirectoryTest();
+
+
+    iCFTPSession->Close();
+	StartScheduler();
+
+	}
+
+void CFtpTest02::ListTest()
+	{
+	iCFTPSession->ListDirectory(_L8("."),myBuffer8);
+	StartScheduler();
+	}
+
+void CFtpTest02::RestartTest()
+	{	
+//	Note: Restart is a synchronous function
+	iCFTPSession->Restart(50000);
+	}
+
+void CFtpTest02::RetriveveTestOverwrite()
+	{
+	total =0;
+	iCFTPSession->Retrieve(iTestParams.iRemoteFileName,iTestParams.iLocalFileName,
+		CFTPSession::EOverwrite,CFTPSession::EBinary,CFTPSession::EStream);
+	StartScheduler();
+	}
+
+void CFtpTest02::FailedRetrievalTest()
+	{
+	iCFTPSession->Retrieve(_L8("NoExist"),_L("NoExist"),CFTPSession::ENoOverwrite,CFTPSession::EBinary,CFTPSession::EStream);
+	StartScheduler();
+	}
+
+void CFtpTest02::FailedRetrievalTestOverwrite()
+	{
+	iCFTPSession->Retrieve(_L8("NoExist"),iTestParams.iLocalFileName,CFTPSession::EOverwrite,CFTPSession::EBinary,CFTPSession::EStream);
+	StartScheduler();
+	}
+
+void CFtpTest02::DeleteFileTest()
+	{
+	iCFTPSession->DeleteFile(iTestParams.iRemoteFileName);
+	StartScheduler();
+	}
+
+void CFtpTest02::StoreTest()
+	{
+	iCFTPSession->Store(iTestParams.iLocalFileName,iTestParams.iRemoteFileName,
+		EFalse, CFTPSession::EBinary,CFTPSession::EStream);
+	StartScheduler();
+	}
+
+void CFtpTest02::RenameTest()
+	{
+	iCFTPSession->RenameFile(iTestParams.iRemoteFileName, _L8("tempName"));
+	StartScheduler();
+	iCFTPSession->RenameFile(_L8("tempName"), iTestParams.iRemoteFileName);
+	StartScheduler();
+	}
+
+void CFtpTest02::DirectoryTest()
+	{
+	iCFTPSession->CreateDirectory(_L8("TestDir0"));
+	StartScheduler();
+	iCFTPSession->DeleteDirectory(_L8("TestDir1"));
+	StartScheduler();
+	}
+
+//Old IP4 ftp sites. Might be worth keeping as a record in case the ones currently being used 
+//stop working.
+//
+//	TInetAddr myaddr(INET_ADDR(207,200,71,59),21);// ftp.netscape.com
+//	TPtrC	DNSName(_L("ftp.netscape.com"));
+//	TPtrC	userName(_L("anonymous"));
+//	TPtrC	passwd(_L("philippe@symbian.com"));
+//	TPtrC	directoryPath(_L("pub/communicator/extras/import/eudora"));
+//	TPtrC	fileName(_L("Readme.txt"));
+//
+//	TInetAddr myaddr(INET_ADDR(209,77,154,25),21);// ftp.insignia.com (home of the braves)
+//	TPtrC	DNSName(_L("ftp.insignia.com"));
+//	TPtrC	userName(_L("anonymous"));
+//	TPtrC	passwd(_L("philippe@symbian.com"));
+//	TPtrC	directoryPath(_L("special/ntrigue/"));
+//	TPtrC	fileName(_L("read4a.txt"));
+//
+//	TInetAddr myaddr(INET_ADDR(194,129,2,201),21);// sparky
+//	TPtrC	DNSName(_L("sparky"));
+//	TPtrC	userName(_L("philippe"));
+//	TPtrC	passwd(_L("massilia"));
+//	TPtrC	directoryPath(_L("ftptest"));
+//	TPtrC	fileName(_L("testfile.bin"));
+//	TPtrC	fileName(_L("map.gif"));
+//	TPtrC	localFile(_L("motodemo.zip"));
+//