Files
Work/ftp/FTP.HPP
2024-08-07 09:16:27 -04:00

124 lines
3.5 KiB
C++

#ifndef _FTP_FTPCLIENT_HPP_
#define _FTP_FTPCLIENT_HPP_
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _SOCKET_SOCKET_HPP_
#include <socket/socket.hpp>
#endif
#ifndef _SOCKET_INETSOCKETADDRESS_HPP_
#include <socket/intsaddr.hpp>
#endif
#ifndef _FTP_FTPDATA_HPP_
#include <ftp/ftpdata.hpp>
#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<String> &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<String> &receiveStrings,Block<String> &responseStrings);
WORD receive(Block<String> &responseStrings);
void buildResponseStrings(void);
WORD isInResponse(const String &responseString,Block<String> &responseStrings);
Socket mFTPControl;
WSASystem mWSASystem;
Block<String> mFTPCommands;
Block<String> mAckConnectionResponseStrings;
Block<String> mAckLoginResponseStrings;
Block<String> mAckLogoutResponseStrings;
Block<String> mAckPortResponseStrings;
Block<String> 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