applayerprotocols/ftpengine/inc/SESSION.H
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/ftpengine/inc/SESSION.H	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,179 @@
+/**
+* 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:
+* EPOC32 FTP Engine header file
+* Author:	Philippe Gabriel
+* Exports set of APIs simplyfying access to the FTP protocol
+* 
+*
+*/
+
+
+
+/**
+ @file SESSION.H
+ @internalComponent
+*/
+
+#if !defined(__SESSION_H__)
+#define __SESSION_H__
+#include <e32base.h>
+#include <es_sock.h>
+#include <f32file.h>
+#include <ftpprot.h>
+#include <ftpsess.h>
+#include "SETERROR.H"
+
+//class CFtpProtocol;
+//class CFtpSessSetError;
+
+/**
+MInterface definition to provide callback functions to the client
+*/
+
+class MSetErrorNotifier;
+NONSHARABLE_CLASS(CFTPSessionDerived) : public CFTPSession,public MFtpProtocolNotifier,MSetErrorNotifier
+/**
+The CFTPSession class
+@internalComponent
+*/
+	{
+public:
+	/** Define the CFTPSetError callback notifier */
+	void SetErrorNotifier(const TInt);
+	/** Define the CFtpProtocol callback notifiers */
+	void ServerMessage(const TDesC8& aMessage);
+	void ServerPositiveAnswerNotification(const TOpComp aStatus);
+	void ServerXFerNotification(const TOpComp aStatus);
+	void ServerNegativeAnswerNotification(const TOpComp aStatus);
+	void ErrorNotification(const TOpComp aStatus);
+	/** Construction */
+	static CFTPSessionDerived* NewL(MFtpSessionNotifier* aNotifier);
+
+	/** Destruction */
+	~CFTPSessionDerived();
+
+	/** Connection APIs */
+
+	/** Establish a connection with a server: */
+	virtual void Connect(	const TSockAddr& aNetAddr, //IP address
+							const TDesC8& aUserName, 
+							const TDesC8& aPassword,
+							const TConnectionMode aConnectionMode=EActive);
+
+	virtual void Connect(	const THostName& aServerName, //DNS name
+							const TDesC8& aUserName, 
+							const TDesC8& aPassword,
+							const TConnectionMode aConnectionMode=EActive, 
+							const TUint aPort=KDefaultServerPiPort);
+
+	/** Close connection with a server */
+	virtual void Close();
+
+	/** Cancel last FTP operation */
+	virtual void Cancel();
+
+	/** Restart an aborted transfer operation */
+	virtual void Restart(const TUint aTFTPRestartOffset);
+
+	/** Transfer APIs */
+
+	/** Store a file on the server	*/
+	virtual void Store(const TDesC& aLocalFileName,
+						const TDesC8& aNewRemoteFileName,
+						const TBool	aOverwrite = FALSE,
+						const RepresentationType aRepresentationType = EBinary,
+						const TransferMode aTransferMode = EStream);
+	
+	/** Get a file from the server */
+	virtual void Retrieve(	const TDesC8& aRemoteFileName,
+							const TDesC& aNewLocalFileName,
+							const TOpenMode	aOpenMode = EOverwrite,
+							const RepresentationType aRepresentationType = EBinary,
+							const TransferMode aTransferMode = EStream);
+	
+	/** File system management functions */
+	virtual void ChangeDirectory(const TDesC8& aDirectoryName);
+	virtual void CreateDirectory(const TDesC8& aDirectoryName);
+	virtual void DeleteDirectory(const TDesC8& aDirectoryName);
+	virtual void GetCurrentDirectory(void);
+	virtual void ListDirectory(const	TDesC8& aDirectoryName,
+										TDes8& aFileList);
+	
+	virtual void DeleteFile(const TDesC8& aFileName);
+	virtual void RenameFile(	const TDesC8& aRemoteFileName,
+								const TDesC8& aNewRemoteFileName);
+private:
+	/** C++ constructor - not exported; implicitly called from NewL() */
+	CFTPSessionDerived(void);
+	/** 2nd phase construction, called by NewL() */
+	void ConstructL(MFtpSessionNotifier* aNotifier); 
+	void NormalTransition(void);
+	void ErrorTransition(const MFtpProtocolNotifier::TOpComp);
+enum TState 
+	{
+	EIdle,
+	EConnecting,EConnected,ELoginUser,ELoginPass,EClosing,
+	EGetCurrentDirectory,EChangeDirectory,ECreateDirectory,
+	EDeleteDirectory,EDeleteFile,ERenameFileFrom,
+	ERenameFileTo,
+	EInitiateListOperation,EInitiateRetrieveOperation,EInitiateStoreOperation,
+	EPerformingPortForList,EPerformingPasvForList,EPerformingList,
+	EPerformingTypeForRetrieve,EPerformingTypeForStore,
+	EPerformingRestForRetrieve,EPerformingRestForStore,
+	EPerformingPortForRetrieve,EPerformingPasvForRetrieve,ERetrieveFile,
+	EPerformingPortForStore,EPerformingPasvForStore,EStoreFile,EStoreFileSendEOF,
+	EAbortingStore,EAbortingRetrieve,EAbortingList
+	};
+TState	UpdateState(TState,MFtpProtocolNotifier::TOpComp);
+TInt debugInt;
+TState	iState;
+/** A pointer to the set of callback notifiers */
+MFtpSessionNotifier*	iFtpSessionNotifier;
+/** A pointer to the CFTPProtocol object */
+CFtpProtocol*	iCFtpProtocol;
+/** A pointer to the CFTPSetError object */
+CFTPSetError*	iCFTPSetError;
+TBool	FileServerInitialised;
+RFs	iFs;
+RFile	iFile;
+TBool	iFileOpErrorOccured;
+/** The current representation type */
+RepresentationType	iCurrentRepresentationType;
+/** A placeholder for the parameter passed to retrieve and store functions*/
+RepresentationType	iNewRepresentationType;
+/** An offset for the FTP REST command to perform a restart */
+TUint	iRESTOffset;
+/** FTP Connection can be passive (server connects on one of my ports) */
+TBool	iPASVMode;
+/**
+A place holder buffer for my API parameters
+client can pass me pointer to params stored on its stack
+need to copy them to a safe place so I can use them latter
+when the scheduler calls my notifier
+*/
+TBuf8<512> iBuffer1; 
+TBuf8<512> iBuffer2; 
+TBuf8<5000> iFileXferBuffer[2]; 
+TInt iCurrentXferBuffer;
+TDes8*	iFileList;
+TInt	iTInt1,iTInt2;
+TBool	iTBool1;
+/** Placeholder for the answer I got from the FTP server */
+TBuf<3> iServerAnswer;	
+TBuf<256> iRenamedLocalFileName;
+TBool iTempStore;
+TBool iFirstRun; //first run of ServerXFerNotification
+};
+#endif