--- /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