#ifndef _FTP_FTPCLIENT_HPP_ #define _FTP_FTPCLIENT_HPP_ #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _COMMON_BLOCK_HPP_ #include #endif #ifndef _SOCKET_SOCKET_HPP_ #include #endif #ifndef _SOCKET_INETSOCKETADDRESS_HPP_ #include #endif #ifndef _FTP_FTPDATA_HPP_ #include #endif class FTPClient : public INETSocketAddress { public: FTPClient(void); virtual ~FTPClient(); WORD open(String hostName); WORD login(String userName,String password); WORD account(String accountInfo); WORD changeWorkingDirectory(String workingDirectory); WORD changeToParentDirectory(void); WORD structureMount(String systemFileGroupDesignator); WORD reinitialize(void); WORD logout(void); WORD port(FTPData &ftpData); WORD passive(void); WORD type(BYTE type,BYTE storage=0); WORD fileStructure(BYTE structure); WORD mode(BYTE transferMode); WORD retrieve(String pathFileName,DWORD &sizeData); WORD store(String pathFileName); WORD storeUnique(String pathFileName); WORD append(String pathFileName); WORD allocate(DWORD numBytes,DWORD maxRecord=0L); WORD restart(String serverMarker); WORD renameFrom(String oldPathFileName); WORD renameTo(String oldPathFileName); WORD abort(void); WORD remove(String pathFileName); WORD removeDirectory(String pathDirectoryName); WORD makeDirectory(String pathDirectoryName); WORD printWorkingDirectory(void); WORD list(String pathName=String()); WORD nameList(String pathName=String(),WORD showResponse=TRUE); WORD siteParameters(void); WORD system(void); WORD status(String pathName=String()); WORD help(String commandName=String()); WORD noop(void); WORD isConnected(void)const; WORD isLoggedIn(void)const; WORD receive(String &lineString); BYTE currentType(void)const; protected: virtual void message(const String &messageString); virtual void message(Block &messageStrings); private: enum FTPCommands{User,Password,Account,ChangeWorkingDirectory,ChangeToParentDirectory, StructureMount,Reinitialize,Logout,DataPort,Passive,RepresentationType,FileStructure, TransferMode,Retrieve,Store,StoreUnique,Append,Allocate,Restart,RenameFrom,RenameTo, Abort,Delete,RemoveDirectory,MakeDirectory,PrintWorkingDirectory,List,NameList,SiteParameters, System,Status,Help,Noop}; void createCommands(void); void isLoggedIn(WORD isLoggedIn); WORD getControlData(void); WORD putControlData(String stringData,WORD waitForResponse=TRUE); void receiveStrings(WORD displayStrings=TRUE); WORD receive(Block &receiveStrings,Block &responseStrings); WORD receive(Block &responseStrings); void buildResponseStrings(void); WORD isInResponse(const String &responseString,Block &responseStrings); Socket mFTPControl; WSASystem mWSASystem; Block mFTPCommands; Block mAckConnectionResponseStrings; Block mAckLoginResponseStrings; Block mAckLogoutResponseStrings; Block mAckPortResponseStrings; Block mResponseStrings; WORD mIsLoggedIn; BYTE mCurrentType; }; inline WORD FTPClient::isConnected(void)const { return mFTPControl.isConnected(); } inline WORD FTPClient::isLoggedIn(void)const { return mIsLoggedIn; } inline void FTPClient::isLoggedIn(WORD isLoggedIn) { mIsLoggedIn=isLoggedIn; } inline WORD FTPClient::receive(String &lineString) { if(!isConnected()||!isLoggedIn())return FALSE; return mFTPControl.receive(lineString); } inline BYTE FTPClient::currentType(void)const { return mCurrentType; } #endif