124 lines
3.5 KiB
C++
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
|
|
|