--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/ftpprot.h Tue Mar 16 16:12:26 2010 +0000
@@ -0,0 +1,379 @@
+/**
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* FTP Protocol header file
+* Author: Philippe Gabriel
+*
+*
+*/
+
+
+
+
+
+/**
+ @file ftprot.h
+ @internalComponent
+*/
+
+#if !defined(__FTPPROT_H__)
+#define __FTPPROT_H__
+
+#include <e32base.h>
+#include <es_sock.h>
+
+/** FTPPROT.DLL major version number.
+@internalComponent */
+#define FTPPROTDLL_VERSION_MAJOR 0x01 // The very first release
+/** FTPPROT.DLL minor version number. */
+#define FTPPROTDLL_VERSION_MINOR 0x03
+/** FTPPROT.DLL version number. */
+#define FTPPROTDLL_VERSION_NUMBER (FTPPROTDLL_VERSION_MAJOR<<8)|FTPPROTDLL_VERSION_MINOR
+
+class MFtpProtocolNotifier
+/** FTP engine callback interface.
+*
+* An FTP engine client implements this interface to receive status and results
+* from asynchronous FTP commands.
+* @internalComponent */
+ {
+// Operation completion return codes.
+
+public:
+/** FTP engine/session operation completeness codes. */
+ enum TOpComp
+ {
+ /** Operation completed normally. */
+ EOpComplete=0,
+ /** Operation cancelled. */
+ EOpCanceled, // User canceled last operation
+ /** Operation failed. */
+ EOpFailed,
+ /** Sockets level error. */
+ ESocketError,
+
+ // Connection errors
+ /** Connection error: Connection reset. */
+ EOpConnectionReset,
+ /** Connection error: Connection failed. */
+ EOpConnectionFailed,
+ /** Connection error: Server not found. */
+ EHostNotFound,
+
+ // Transfer error
+ /** Transfer error: Transfer was reset. */
+ EXferReset,
+ /** Transfer error: Transfer is not initialised. */
+ EXferNotInitialised,
+
+ //Transfer notification
+ /** Transfer notification: Data packet was received. */
+ EPacketReceived,
+ /** Transfer notification: Data packet was sent. */
+ EPacketSent
+ };
+public:
+ /** Destructor. */
+ virtual ~MFtpProtocolNotifier(){};
+
+ /** Positive reply received from server.
+ *
+ * @param aStatus Operation completion code */
+ virtual void ServerPositiveAnswerNotification(const TOpComp aStatus)=0;
+
+
+ /** Message sent by the FTP server.
+ *
+ * This returns the full server reply in plain text format.
+ *
+ * @param aMessage The message sent by the server */
+ virtual void ServerMessage(const TDesC8& aMessage)=0;
+
+ /** Data transfer notification received from the server.
+ *
+ * @param aStatus Operation completion code */
+ virtual void ServerXFerNotification(const TOpComp aStatus)=0;
+
+ /** Negative reply received from server.
+ *
+ * @param aStatus Operation completion code */
+ virtual void ServerNegativeAnswerNotification(const TOpComp aStatus)=0;
+
+ /** Error condition notification.
+ *
+ * @param aStatus Operation completion code */
+ virtual void ErrorNotification(const TOpComp aStatus)=0;
+ };
+
+
+class CFtpProtocol : public CBase
+/** Implements an FTP engine, and allows the client to access the individual FTP
+* commands as defined in RFC959.
+*
+* Note that before commands that cause data to transit on the DTP channel (e.g. NLST,
+* LIST, RETR, STOR) a data buffer must be provided using SendBuffer()/RecvBuffer().
+* Also, when the client is notified of a MoreData() event, it must re-issue RecvBuffer()
+* to get the rest of the data.
+* @internalComponent
+*/
+ {
+public:
+
+// Establish a connection:
+ /** Connect to an FTP server, specifying an IP address.
+ *
+ * @param aNetAddr FTP server's IP address */
+ virtual void Connect(TSockAddr& aNetAddr)=0; // IP address
+
+ /** Connect to an FTP server, specifying a DNS name.
+ *
+ * @param aServerName FTP server's DNS name */
+ virtual void Connect(const THostName& aServerName)=0; // URL name
+
+ /** Connect to an FTP server, specifying a DNS name and port number.
+ *
+ * @param aServerName FTP server's DNS name
+ * @param aPort FTP server's port */
+ virtual void Connect(const THostName& aServerName, const TUint aPort)=0; // URL name + port
+
+// FTP commands, presented in the same order as RFC959:
+ /** Issues the USER command.
+ *
+ * @param aParam Telnet string identifying the user */
+ virtual void User(const TDesC8& aParam)=0;
+
+ /** Issues the PASS command.
+ *
+ * @param aParam Telnet string specifying the user's password */
+ virtual void Pass(const TDesC8& aParam)=0;
+
+ /** Issues the ACCT command.
+ *
+ * @param aParam Telnet string identifying the user's account */
+ virtual void Acct(const TDesC8& aParam)=0;
+
+ /** Issues the CWD command.
+ *
+ * @param aParam Directory or other system dependent file group designator */
+ virtual void Cwd(const TDesC8& aParam)=0;
+
+ /** Issues the CDUP command. */
+ virtual void Cdup(void)=0;
+
+ /** Issues the SMNT command.
+ *
+ * @param aParam Pathname specifying a directory or other system dependent file
+ * group designator */
+ virtual void Smnt(const TDesC8& aParam)=0;
+
+ /** Issues the QUIT command. */
+ virtual void Quit(void)=0;
+
+ /** Issues the REIN command. */
+ virtual void Rein(void)=0;
+
+ /** Issues the PORT command, setting the Data Transfer Process port to a value
+ * allocated by the Sockets Server. */
+ virtual void Port(void)=0; // Sets the DTP port to one allocated by ESOCK
+
+ /** Issues the PORT command, specifying a port number.
+ *
+ * @param aPort Port number */
+ virtual void Port(TUint aPort)=0; // Sets the DTP port to a specific one
+
+ /** Issues the PASV command. */
+ virtual void Pasv(void)=0;
+
+ /** Issues the TYPE command (single parameter).
+ *
+ * @param aParam First representation type parameter */
+ virtual void Type(const TDesC8& aParam)=0;
+
+ /** Issues the TYPE command (two parameters).
+ *
+ * @param aParam1 First representation type parameter
+ * @param aParam2 Second representation type parameter */
+ virtual void Type(const TDesC8& aParam1, const TDesC8& aParam2)=0;
+
+ /** Issues the STRU command.
+ *
+ * @param aParam Telnet character code specifying the file structure */
+ virtual void Stru(const TDesC8& aParam)=0;
+
+ /** Issues the MODE command.
+ *
+ * @param aParam Telnet character code specifying the data transfer mode */
+ virtual void Mode(const TDesC8& aParam)=0;
+
+ /** Issues the RETR command.
+ *
+ * @param aFileName File name */
+ virtual void Retr(const TDesC8& aFileName)=0;
+
+ /** Issues the STOR command.
+ *
+ * @param aFileName File name */
+ virtual void Stor(const TDesC8& aFileName)=0;
+
+ /** Issues the STOU command. */
+ virtual void Stou(void)=0;
+
+ /** Issues the APPE command.
+ *
+ * @param aFileName File name */
+ virtual void Appe(const TDesC8& aFileName)=0;
+
+ /** Issues the ALLO command (single parameter).
+ *
+ * @param aParam Number of bytes (using the logical byte size) of storage to
+ * be reserved for the file */
+ virtual void Allo(const TDesC8& aParam)=0;
+
+ /** Issues the ALLO command (two parameters).
+ *
+ * @param aParam1 Number of bytes (using the logical byte size) of storage to
+ * be reserved for the file
+ * @param aParam2 Maximum record or page size (in logical bytes) */
+ virtual void Allo(const TDesC8& aParam1, const TDesC8& aParam2)=0;
+
+ /** Issues the REST command.
+ *
+ * @param aParam The server marker at which file transfer is to be restarted */
+ virtual void Rest(const TDesC8& aParam)=0;
+
+ /** Issues the RNFR command.
+ *
+ * @param aFileName File name */
+ virtual void Rnfr(const TDesC8& aFileName)=0;
+
+ /** Issues the RNTO command.
+ *
+ * @param aFileName File name */
+ virtual void Rnto(const TDesC8& aFileName)=0;
+
+ /** Issues the ABOR command. */
+ virtual void Abor(void)=0;
+
+ /** Issues the DELE command.
+ *
+ * @param aFileName File name */
+ virtual void Dele(const TDesC8& aFileName)=0;
+
+ /** Issues the RMD command.
+ *
+ * @param aParam Directory name */
+ virtual void Rmd(const TDesC8& aParam)=0;
+
+ /** Issues the MKD command.
+ *
+ * @param aParam Directory name */
+ virtual void Mkd(const TDesC8& aParam)=0;
+
+ /** Issues the PWD command. */
+ virtual void Pwd(void)=0;
+
+ /** Issues the LIST command, giving a null argument. */
+ virtual void List(void)=0;
+
+ /** Issues the LIST command, specifying a file/directory name.
+ *
+ * @param aParam File/directory name */
+ virtual void List(const TDesC8& aParam)=0;
+
+ /** Issues the NLST command, giving a null argument. */
+ virtual void Nlst(void)=0;
+
+ /** Issues the NLST command, specifying a directory name.
+ *
+ * @param aParam Directory name */
+ virtual void Nlst(const TDesC8& aParam)=0;
+
+ /** Issues the SITE command.
+ *
+ * @param aParam SITE command argument */
+ virtual void Site(const TDesC8& aParam)=0;
+
+ /** Issues the SYST command. */
+ virtual void Syst(void)=0;
+
+ /** Issues the STAT command, specifying an argument.
+ *
+ * @param aParam STAT command argument */
+ virtual void Stat(const TDesC8& aParam)=0;
+
+ /** Issues the STAT command (no argument). */
+ virtual void Stat(void)=0;
+
+ /** Issues the HELP command.
+ *
+ * @param aParam HELP command argument */
+ virtual void Help(const TDesC8& aParam)=0;
+
+ /** Issues the HELP command (no argument). */
+ virtual void Help(void)=0;
+
+ /** Issues the NOOP command. */
+ virtual void Noop(void)=0;
+
+// Buffer management for transfer
+ // Following functions pass a pointer to a buffer
+ // to transfer data to/from the Dtp channel
+ // Before an operation which cause data to transit on the
+ // DTP channel to occur (Nlst, List, Retr, Stor)
+ // a Buffer must be provided with the following api
+ // Also when the client is notified of a MoreData event
+ // It must reissue the following operation to get the rest of
+ // the data
+ /** Specifies a buffer to transfer data to the DTP channel.
+ *
+ * @param aBuffer Send receive */
+ virtual void SendBuffer(TDes8* aBuffer)=0;
+
+ /** Specifies a buffer to receive data from the DTP channel.
+ *
+ * @param aBuffer Receive buffer */
+ virtual void RecvBuffer(TDes8* aBuffer)=0;
+
+ /** Finishes the transfer initiated by a STOR command. */
+ virtual void SendEOF(void)=0; //Finishes the transfer initiated by a stor command
+
+ /** Cancels current operation. */
+ virtual void UserCancel(void)=0;
+
+// Copies the 3 digits answer received from the FTP server
+ /** Gets the 3 digits answer received from the FTP server.
+ *
+ * @param aServerAnswer 3 digit answer */
+ virtual void FTPServerAnswer(TDes& aServerAnswer)=0;
+
+ /**
+ Returns 32-bit, with MAJOR_VERSION in the highest byte
+ MINOR_VERSION in the next byte
+ i.e. MAJOR 2, MINOR 0x34, BUILD 0x278 would be "ver 2.52
+ */
+ IMPORT_C static TUint32 GetVersion(void);
+
+ /** Allocates and constructs a new FTP engine object.
+ *
+ * @return New FTP engine object
+ */
+ // @param aNotifier Client callback interface.
+ // The FTP engine calls this interface to pass
+ //server responses and status messages to the client.
+ IMPORT_C static CFtpProtocol *NewL(MFtpProtocolNotifier*);
+
+ /**Destructor.*/
+ virtual ~CFtpProtocol();
+ };
+#endif //__FTPPROT_H__