1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/ftpprot.h Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -0,0 +1,379 @@
1.4 +/**
1.5 +* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* 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
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +* FTP Protocol header file
1.19 +* Author: Philippe Gabriel
1.20 +*
1.21 +*
1.22 +*/
1.23 +
1.24 +
1.25 +
1.26 +
1.27 +
1.28 +/**
1.29 + @file ftprot.h
1.30 + @internalComponent
1.31 +*/
1.32 +
1.33 +#if !defined(__FTPPROT_H__)
1.34 +#define __FTPPROT_H__
1.35 +
1.36 +#include <e32base.h>
1.37 +#include <es_sock.h>
1.38 +
1.39 +/** FTPPROT.DLL major version number.
1.40 +@internalComponent */
1.41 +#define FTPPROTDLL_VERSION_MAJOR 0x01 // The very first release
1.42 +/** FTPPROT.DLL minor version number. */
1.43 +#define FTPPROTDLL_VERSION_MINOR 0x03
1.44 +/** FTPPROT.DLL version number. */
1.45 +#define FTPPROTDLL_VERSION_NUMBER (FTPPROTDLL_VERSION_MAJOR<<8)|FTPPROTDLL_VERSION_MINOR
1.46 +
1.47 +class MFtpProtocolNotifier
1.48 +/** FTP engine callback interface.
1.49 +*
1.50 +* An FTP engine client implements this interface to receive status and results
1.51 +* from asynchronous FTP commands.
1.52 +* @internalComponent */
1.53 + {
1.54 +// Operation completion return codes.
1.55 +
1.56 +public:
1.57 +/** FTP engine/session operation completeness codes. */
1.58 + enum TOpComp
1.59 + {
1.60 + /** Operation completed normally. */
1.61 + EOpComplete=0,
1.62 + /** Operation cancelled. */
1.63 + EOpCanceled, // User canceled last operation
1.64 + /** Operation failed. */
1.65 + EOpFailed,
1.66 + /** Sockets level error. */
1.67 + ESocketError,
1.68 +
1.69 + // Connection errors
1.70 + /** Connection error: Connection reset. */
1.71 + EOpConnectionReset,
1.72 + /** Connection error: Connection failed. */
1.73 + EOpConnectionFailed,
1.74 + /** Connection error: Server not found. */
1.75 + EHostNotFound,
1.76 +
1.77 + // Transfer error
1.78 + /** Transfer error: Transfer was reset. */
1.79 + EXferReset,
1.80 + /** Transfer error: Transfer is not initialised. */
1.81 + EXferNotInitialised,
1.82 +
1.83 + //Transfer notification
1.84 + /** Transfer notification: Data packet was received. */
1.85 + EPacketReceived,
1.86 + /** Transfer notification: Data packet was sent. */
1.87 + EPacketSent
1.88 + };
1.89 +public:
1.90 + /** Destructor. */
1.91 + virtual ~MFtpProtocolNotifier(){};
1.92 +
1.93 + /** Positive reply received from server.
1.94 + *
1.95 + * @param aStatus Operation completion code */
1.96 + virtual void ServerPositiveAnswerNotification(const TOpComp aStatus)=0;
1.97 +
1.98 +
1.99 + /** Message sent by the FTP server.
1.100 + *
1.101 + * This returns the full server reply in plain text format.
1.102 + *
1.103 + * @param aMessage The message sent by the server */
1.104 + virtual void ServerMessage(const TDesC8& aMessage)=0;
1.105 +
1.106 + /** Data transfer notification received from the server.
1.107 + *
1.108 + * @param aStatus Operation completion code */
1.109 + virtual void ServerXFerNotification(const TOpComp aStatus)=0;
1.110 +
1.111 + /** Negative reply received from server.
1.112 + *
1.113 + * @param aStatus Operation completion code */
1.114 + virtual void ServerNegativeAnswerNotification(const TOpComp aStatus)=0;
1.115 +
1.116 + /** Error condition notification.
1.117 + *
1.118 + * @param aStatus Operation completion code */
1.119 + virtual void ErrorNotification(const TOpComp aStatus)=0;
1.120 + };
1.121 +
1.122 +
1.123 +class CFtpProtocol : public CBase
1.124 +/** Implements an FTP engine, and allows the client to access the individual FTP
1.125 +* commands as defined in RFC959.
1.126 +*
1.127 +* Note that before commands that cause data to transit on the DTP channel (e.g. NLST,
1.128 +* LIST, RETR, STOR) a data buffer must be provided using SendBuffer()/RecvBuffer().
1.129 +* Also, when the client is notified of a MoreData() event, it must re-issue RecvBuffer()
1.130 +* to get the rest of the data.
1.131 +* @internalComponent
1.132 +*/
1.133 + {
1.134 +public:
1.135 +
1.136 +// Establish a connection:
1.137 + /** Connect to an FTP server, specifying an IP address.
1.138 + *
1.139 + * @param aNetAddr FTP server's IP address */
1.140 + virtual void Connect(TSockAddr& aNetAddr)=0; // IP address
1.141 +
1.142 + /** Connect to an FTP server, specifying a DNS name.
1.143 + *
1.144 + * @param aServerName FTP server's DNS name */
1.145 + virtual void Connect(const THostName& aServerName)=0; // URL name
1.146 +
1.147 + /** Connect to an FTP server, specifying a DNS name and port number.
1.148 + *
1.149 + * @param aServerName FTP server's DNS name
1.150 + * @param aPort FTP server's port */
1.151 + virtual void Connect(const THostName& aServerName, const TUint aPort)=0; // URL name + port
1.152 +
1.153 +// FTP commands, presented in the same order as RFC959:
1.154 + /** Issues the USER command.
1.155 + *
1.156 + * @param aParam Telnet string identifying the user */
1.157 + virtual void User(const TDesC8& aParam)=0;
1.158 +
1.159 + /** Issues the PASS command.
1.160 + *
1.161 + * @param aParam Telnet string specifying the user's password */
1.162 + virtual void Pass(const TDesC8& aParam)=0;
1.163 +
1.164 + /** Issues the ACCT command.
1.165 + *
1.166 + * @param aParam Telnet string identifying the user's account */
1.167 + virtual void Acct(const TDesC8& aParam)=0;
1.168 +
1.169 + /** Issues the CWD command.
1.170 + *
1.171 + * @param aParam Directory or other system dependent file group designator */
1.172 + virtual void Cwd(const TDesC8& aParam)=0;
1.173 +
1.174 + /** Issues the CDUP command. */
1.175 + virtual void Cdup(void)=0;
1.176 +
1.177 + /** Issues the SMNT command.
1.178 + *
1.179 + * @param aParam Pathname specifying a directory or other system dependent file
1.180 + * group designator */
1.181 + virtual void Smnt(const TDesC8& aParam)=0;
1.182 +
1.183 + /** Issues the QUIT command. */
1.184 + virtual void Quit(void)=0;
1.185 +
1.186 + /** Issues the REIN command. */
1.187 + virtual void Rein(void)=0;
1.188 +
1.189 + /** Issues the PORT command, setting the Data Transfer Process port to a value
1.190 + * allocated by the Sockets Server. */
1.191 + virtual void Port(void)=0; // Sets the DTP port to one allocated by ESOCK
1.192 +
1.193 + /** Issues the PORT command, specifying a port number.
1.194 + *
1.195 + * @param aPort Port number */
1.196 + virtual void Port(TUint aPort)=0; // Sets the DTP port to a specific one
1.197 +
1.198 + /** Issues the PASV command. */
1.199 + virtual void Pasv(void)=0;
1.200 +
1.201 + /** Issues the TYPE command (single parameter).
1.202 + *
1.203 + * @param aParam First representation type parameter */
1.204 + virtual void Type(const TDesC8& aParam)=0;
1.205 +
1.206 + /** Issues the TYPE command (two parameters).
1.207 + *
1.208 + * @param aParam1 First representation type parameter
1.209 + * @param aParam2 Second representation type parameter */
1.210 + virtual void Type(const TDesC8& aParam1, const TDesC8& aParam2)=0;
1.211 +
1.212 + /** Issues the STRU command.
1.213 + *
1.214 + * @param aParam Telnet character code specifying the file structure */
1.215 + virtual void Stru(const TDesC8& aParam)=0;
1.216 +
1.217 + /** Issues the MODE command.
1.218 + *
1.219 + * @param aParam Telnet character code specifying the data transfer mode */
1.220 + virtual void Mode(const TDesC8& aParam)=0;
1.221 +
1.222 + /** Issues the RETR command.
1.223 + *
1.224 + * @param aFileName File name */
1.225 + virtual void Retr(const TDesC8& aFileName)=0;
1.226 +
1.227 + /** Issues the STOR command.
1.228 + *
1.229 + * @param aFileName File name */
1.230 + virtual void Stor(const TDesC8& aFileName)=0;
1.231 +
1.232 + /** Issues the STOU command. */
1.233 + virtual void Stou(void)=0;
1.234 +
1.235 + /** Issues the APPE command.
1.236 + *
1.237 + * @param aFileName File name */
1.238 + virtual void Appe(const TDesC8& aFileName)=0;
1.239 +
1.240 + /** Issues the ALLO command (single parameter).
1.241 + *
1.242 + * @param aParam Number of bytes (using the logical byte size) of storage to
1.243 + * be reserved for the file */
1.244 + virtual void Allo(const TDesC8& aParam)=0;
1.245 +
1.246 + /** Issues the ALLO command (two parameters).
1.247 + *
1.248 + * @param aParam1 Number of bytes (using the logical byte size) of storage to
1.249 + * be reserved for the file
1.250 + * @param aParam2 Maximum record or page size (in logical bytes) */
1.251 + virtual void Allo(const TDesC8& aParam1, const TDesC8& aParam2)=0;
1.252 +
1.253 + /** Issues the REST command.
1.254 + *
1.255 + * @param aParam The server marker at which file transfer is to be restarted */
1.256 + virtual void Rest(const TDesC8& aParam)=0;
1.257 +
1.258 + /** Issues the RNFR command.
1.259 + *
1.260 + * @param aFileName File name */
1.261 + virtual void Rnfr(const TDesC8& aFileName)=0;
1.262 +
1.263 + /** Issues the RNTO command.
1.264 + *
1.265 + * @param aFileName File name */
1.266 + virtual void Rnto(const TDesC8& aFileName)=0;
1.267 +
1.268 + /** Issues the ABOR command. */
1.269 + virtual void Abor(void)=0;
1.270 +
1.271 + /** Issues the DELE command.
1.272 + *
1.273 + * @param aFileName File name */
1.274 + virtual void Dele(const TDesC8& aFileName)=0;
1.275 +
1.276 + /** Issues the RMD command.
1.277 + *
1.278 + * @param aParam Directory name */
1.279 + virtual void Rmd(const TDesC8& aParam)=0;
1.280 +
1.281 + /** Issues the MKD command.
1.282 + *
1.283 + * @param aParam Directory name */
1.284 + virtual void Mkd(const TDesC8& aParam)=0;
1.285 +
1.286 + /** Issues the PWD command. */
1.287 + virtual void Pwd(void)=0;
1.288 +
1.289 + /** Issues the LIST command, giving a null argument. */
1.290 + virtual void List(void)=0;
1.291 +
1.292 + /** Issues the LIST command, specifying a file/directory name.
1.293 + *
1.294 + * @param aParam File/directory name */
1.295 + virtual void List(const TDesC8& aParam)=0;
1.296 +
1.297 + /** Issues the NLST command, giving a null argument. */
1.298 + virtual void Nlst(void)=0;
1.299 +
1.300 + /** Issues the NLST command, specifying a directory name.
1.301 + *
1.302 + * @param aParam Directory name */
1.303 + virtual void Nlst(const TDesC8& aParam)=0;
1.304 +
1.305 + /** Issues the SITE command.
1.306 + *
1.307 + * @param aParam SITE command argument */
1.308 + virtual void Site(const TDesC8& aParam)=0;
1.309 +
1.310 + /** Issues the SYST command. */
1.311 + virtual void Syst(void)=0;
1.312 +
1.313 + /** Issues the STAT command, specifying an argument.
1.314 + *
1.315 + * @param aParam STAT command argument */
1.316 + virtual void Stat(const TDesC8& aParam)=0;
1.317 +
1.318 + /** Issues the STAT command (no argument). */
1.319 + virtual void Stat(void)=0;
1.320 +
1.321 + /** Issues the HELP command.
1.322 + *
1.323 + * @param aParam HELP command argument */
1.324 + virtual void Help(const TDesC8& aParam)=0;
1.325 +
1.326 + /** Issues the HELP command (no argument). */
1.327 + virtual void Help(void)=0;
1.328 +
1.329 + /** Issues the NOOP command. */
1.330 + virtual void Noop(void)=0;
1.331 +
1.332 +// Buffer management for transfer
1.333 + // Following functions pass a pointer to a buffer
1.334 + // to transfer data to/from the Dtp channel
1.335 + // Before an operation which cause data to transit on the
1.336 + // DTP channel to occur (Nlst, List, Retr, Stor)
1.337 + // a Buffer must be provided with the following api
1.338 + // Also when the client is notified of a MoreData event
1.339 + // It must reissue the following operation to get the rest of
1.340 + // the data
1.341 + /** Specifies a buffer to transfer data to the DTP channel.
1.342 + *
1.343 + * @param aBuffer Send receive */
1.344 + virtual void SendBuffer(TDes8* aBuffer)=0;
1.345 +
1.346 + /** Specifies a buffer to receive data from the DTP channel.
1.347 + *
1.348 + * @param aBuffer Receive buffer */
1.349 + virtual void RecvBuffer(TDes8* aBuffer)=0;
1.350 +
1.351 + /** Finishes the transfer initiated by a STOR command. */
1.352 + virtual void SendEOF(void)=0; //Finishes the transfer initiated by a stor command
1.353 +
1.354 + /** Cancels current operation. */
1.355 + virtual void UserCancel(void)=0;
1.356 +
1.357 +// Copies the 3 digits answer received from the FTP server
1.358 + /** Gets the 3 digits answer received from the FTP server.
1.359 + *
1.360 + * @param aServerAnswer 3 digit answer */
1.361 + virtual void FTPServerAnswer(TDes& aServerAnswer)=0;
1.362 +
1.363 + /**
1.364 + Returns 32-bit, with MAJOR_VERSION in the highest byte
1.365 + MINOR_VERSION in the next byte
1.366 + i.e. MAJOR 2, MINOR 0x34, BUILD 0x278 would be "ver 2.52
1.367 + */
1.368 + IMPORT_C static TUint32 GetVersion(void);
1.369 +
1.370 + /** Allocates and constructs a new FTP engine object.
1.371 + *
1.372 + * @return New FTP engine object
1.373 + */
1.374 + // @param aNotifier Client callback interface.
1.375 + // The FTP engine calls this interface to pass
1.376 + //server responses and status messages to the client.
1.377 + IMPORT_C static CFtpProtocol *NewL(MFtpProtocolNotifier*);
1.378 +
1.379 + /**Destructor.*/
1.380 + virtual ~CFtpProtocol();
1.381 + };
1.382 +#endif //__FTPPROT_H__