diff -r 000000000000 -r b16258d2340f applayerprotocols/ftpengine/inc/PROTOCOL.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/ftpengine/inc/PROTOCOL.H Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,224 @@ +/** +* 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: +* FTP Protocol header file +* Author: Philippe Gabriel +* +* +*/ + + + +/** + @file protocol.h + @internalComponent +*/ + +#if !defined(__PROTOCOL_H__) +#define __PROTOCOL_H__ + +#include +#include +#include +#include "FTPDEF.H" +#include "DEBUG.H" +#include "PICHNL.H" +#include "DTPCHNL.H" +#include "RESOLVER.H" +#include "SETERROR.H" + + + +class TFTPServerAnswerParser; +class TFtpPASVAnswerParser; + +NONSHARABLE_CLASS(CFtpProtocolDerived) : public CFtpProtocol,public MPIChannelNotifier,MDTPChannelNotifier,MFTPResolverNotifier,MSetErrorNotifier +/** +FtpEngine +@internalComponent +*/ + { +friend class CDTPChannel; +friend class CPIChannel; +public: + /** Establish a connection: IP address */ + void Connect(TSockAddr& aNetAddr); + /** URL name */ + void Connect(const THostName& aServerName); + /** URL name + port */ + void Connect(const THostName& aServerName, const TUint aPort); + + /** FTP commands, presented in the same order as RFC959: */ + void User(const TDesC8& aParam); + void Pass(const TDesC8& aParam); + void Acct(const TDesC8& aParam); + void Cwd(const TDesC8& aParam); + void Cdup(void); + void Smnt(const TDesC8& aParam); + void Quit(void); + void Rein(void); + /** Sets the DTP port to one allocated by ESOCK */ + void Port(void); + /** Sets the DTP port to a specific one */ + void Port(TUint aPort); + void Pasv(void); + void Type(const TDesC8& aParam); + void Type(const TDesC8& aParam1, const TDesC8& aParam2); + void Stru(const TDesC8& aParam); + void Mode(const TDesC8& aParam); + void Retr(const TDesC8& aFileName); + void Stor(const TDesC8& aFileName); + void Stou(void); + void Appe(const TDesC8& aFileName); + void Allo(const TDesC8& aParam); + void Allo(const TDesC8& aParam1, const TDesC8& aParam2); + void Rest(const TDesC8& aParam); + void Rnfr(const TDesC8& aFileName); + void Rnto(const TDesC8& aFileName); + void Abor(void); + void Dele(const TDesC8& aFileName); + void Rmd(const TDesC8& aParam); + void Mkd(const TDesC8& aParam); + void Pwd(void); + void List(void); + void List(const TDesC8& aParam); + void Nlst(void); + void Nlst(const TDesC8& aParam); + void Site(const TDesC8& aParam); + void Syst(void); + void Stat(const TDesC8& aParam); + void Stat(void); + void Help(const TDesC8& aParam); + void Help(void); + void Noop(void); + /** + 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 + */ + void SendBuffer(TDes8* aBuffer); + void RecvBuffer(TDes8* aBuffer); + /** Finishes the transfer initiated by a stor command */ + void SendEOF(void); + /** PI Channel Minterface */ + void PIChannelOperationCompletion(const TPiOperationCompletion); + /** Notify of error performing an operation */ + void PIChannelOperationError(const TPiOperationError); + /** Notify of reception */ + void PIChannelRcvNotification(void); + /** Notify server has unexpectidly dropped the connection */ + void PIChannelReset(void); + /** DTP Channel Minterface */ + /** Notify of normal completion of an operation */ + void DTPChannelOperationCompletion(const TDtpOperationCompletion); + /** Notify of error performing an operation */ + void DTPChannelOperationError(const TDtpOperationError); + /** Notify of reception */ + void DTPChannelXferNotification(const TDtpOperationCompletion); + /** FTP DNS resolver Minterface */ + void FTPResolverNotifier(const TFTPResolverNotificationCode); + /** Copies the 3 digits answer received from the FTP server */ + void FTPServerAnswer(TDes& aServerAnswer){aServerAnswer.Copy(iAnswer);} + /** Define the CFTPSetError callback notifier */ + void SetErrorNotifier(const TInt); + + void UserCancel(void); + ~CFtpProtocolDerived(); + static CFtpProtocolDerived *NewL(MFtpProtocolNotifier*); + +protected: + CFtpProtocolDerived(MFtpProtocolNotifier* aNotifier); + + void ConstructL(void); + /** Address of the remote FTP server */ + TInetAddr iRemoteAddress; + /** A Buffer to receive server answers */ + TBuf8<512> iServerAnswerBuffer; +private: + enum TState + { + EIdle, + ELookingUp, + EConnecting, + EPerformingUser,EPerformingPass,EPerformingAcct,EPerformingCwd,EPerformingCdup, + EPerformingSmnt,EPerformingQuit,EPerformingRein,EPerformingPort, + EPerformingPasv,EPerformingType,EPerformingStru,EPerformingMode,EPerformingRetr, + EPerformingStor,EPerformingStou,EPerformingAppe,EPerformingAllo,EPerformingRest, + EPerformingRnfr,EPerformingRnto,EPerformingDele,EPerformingRmd, + EPerformingMkd,EPerformingPwd,EPerformingList,EPerformingNlst,EPerformingSite, + EPerformingSyst,EPerformingStat,EPerformingHelp,EPerformingNoop, + EPerformingAbor + }; + enum TInternalEvents + { + EFtpCodeReply, + EDtpChannelConnected, + EDtpChannelClosed, + EPiChannelConnectComplete, + EPiChannelSendComplete, + EPacketReceived, + /** Error events + */ + EPiReset, + EDtpReset, + }; + enum TPanic + { + EPIPanicParserFailure = -1, + EPIPanicMegaOI = -2, + EAddressFamily = -3 + }; + void InitCommL(void); + //void FTPReply(void); + void UpdateState(const TInternalEvents aEvent); + TInt iState; + MFtpProtocolNotifier* iNotifier; + TFTPServerAnswerParser* iFTPServerAnswerParser; + TFtpPASVAnswerParser* iFtpPASVAnswerParser; + CPIChannel* iPiChannel; + CDTPChannel* iDtpChannel; + CFTPResolver* iResolver; + /** A pointer to the CFTPSetError object */ + CFTPSetError* iCFTPSetError; + /** A socket server to be used for */ + RSocketServ iSockServ; + /** all socket operations */ + /** my local address (to advertise to the server) */ + TInetAddr iLocalAddress; + /** FTP Connection can be passive (server connects on one of my ports) */ + TBool iPASVMode; + /** Port number for the DTP Channel (to advertise to the server) + or active, FTP server gives me an address to connect to */ + TUint iPort; + /** Address of the FTP channel (note: RFC says this + IP address can be different than the PI Channel IP address */ + TInetAddr iFTPDTPAddress; + /** Placeholder for the answer I got from the FTP server */ + TBuf8<3> iAnswer; + /** A Buffer to construct FTP commands */ + TBuf8<256> iFTPCmdBuffer; + /** A Buffer to construct FTP commands */ + TDes8* iIOBuffer; + /** helper to Port() */ + void BuildPORTCommand(); + /** helper to Port() */ + void BuildEPRTCommand(); + }; +#endif //__PROTOCOL_H__