📄 ftpdatatypes.h
字号:
T_enTypeFormat AsEnum() const { return m_enTypeFormat; }
static const CTypeFormat NonPrint() { return tfNonPrint; }
static const CTypeFormat TelnetFormat() { return tfTelnetFormat; }
static const CTypeFormat CarriageControl() { return tfCarriageControl; }
private:
CTypeFormat(T_enTypeFormat enTypeFormat) : m_enTypeFormat(enTypeFormat) {}
T_enTypeFormat m_enTypeFormat;
};
/// Representation Type (see also CType and CTypeFormat)
class CRepresentation
{
public:
/// there is only NonPrint as FormatType supported yet
CRepresentation(CType Type) : m_Type(Type), m_Format(CTypeFormat::NonPrint()) {}
bool operator!=(const CRepresentation& rep1) const { return rep1.m_Type != m_Type || rep1.m_Format != m_Format; }
bool operator==(const CRepresentation& rep1) const { return rep1.m_Type == m_Type && rep1.m_Format == m_Format; }
CRepresentation& operator=(const CRepresentation& rhs)
{
m_Type = rhs.m_Type;
m_Format = rhs.m_Format;
return *this;
}
const CType& Type() const { return m_Type; }
const CTypeFormat& Format() const { return m_Format; }
private:
CType m_Type;
CTypeFormat m_Format;
};
/// @brief Represents ftp-commands that use the data port (usually port 20).
class CDatachannelCmd
{
public:
enum T_enDatachannelCmd { cmdLIST, cmdNLST, cmdRETR, cmdSTOR, cmdSTOU, cmdAPPE };
CDatachannelCmd(const CDatachannelCmd& datachannelCmd) :
m_enDatachannelCmd(datachannelCmd.AsEnum()) {}
bool operator==(T_enDatachannelCmd rhs) const { return m_enDatachannelCmd==rhs; }
bool operator!=(T_enDatachannelCmd rhs) const { return m_enDatachannelCmd!=rhs; }
bool operator==(const CDatachannelCmd& rhs) const { return m_enDatachannelCmd==rhs.AsEnum(); }
bool operator!=(const CDatachannelCmd& rhs) const { return m_enDatachannelCmd!=rhs.AsEnum(); }
CDatachannelCmd& operator=(const CDatachannelCmd& rhs)
{
m_enDatachannelCmd = rhs.AsEnum();
return *this;
}
T_enDatachannelCmd AsEnum() const { return m_enDatachannelCmd; }
static const CDatachannelCmd LIST() { return cmdLIST; }
static const CDatachannelCmd NLST() { return cmdNLST; }
static const CDatachannelCmd RETR() { return cmdRETR; }
static const CDatachannelCmd STOR() { return cmdSTOR; }
static const CDatachannelCmd STOU() { return cmdSTOU; }
static const CDatachannelCmd APPE() { return cmdAPPE; }
private:
CDatachannelCmd(T_enDatachannelCmd enDatachannelCmd) : m_enDatachannelCmd(enDatachannelCmd) {}
T_enDatachannelCmd m_enDatachannelCmd;
};
/// @brief Structure for logon information.
///
/// Holds all necessary parameters for logging on a ftp-server.
/// Includes also the parameters which are needed for firewall logon.
class CLogonInfo
{
public:
CLogonInfo();
CLogonInfo(const tstring& strHostname, USHORT ushHostport=DEFAULT_FTP_PORT, const tstring& strUsername=ANONYMOUS_USER,
const tstring& strPassword=_T("anonymous@user.com"), const tstring& strAccount=_T(""));
CLogonInfo(const tstring& strHostname, USHORT ushHostport, const tstring& strUsername, const tstring& strPassword,
const tstring& strAccount, const tstring& strFwHostname, const tstring& strFwUsername, const tstring& strFwPassword,
USHORT ushFwPort, const CFirewallType& crFwType);
void SetHost(const tstring& strHostname, USHORT ushHostport=DEFAULT_FTP_PORT, const tstring& strUsername=ANONYMOUS_USER,
const tstring& strPassword=_T("anonymous@user.com"), const tstring& strAccount=_T(""));
void SetFirewall(const tstring& strFwHostname, const tstring& strFwUsername, const tstring& strFwPassword,
USHORT ushFwPort, const CFirewallType& crFwType);
void DisableFirewall() { m_FwType = CFirewallType::None(); }
const tstring& Hostname() const { return m_strHostname; }
USHORT Hostport() const { return m_ushHostport; }
const tstring& Username() const { return m_strUsername; }
const tstring& Password() const { return m_strPassword; }
const tstring& Account() const { return m_strAccount; }
const tstring& FwHost() const { return m_strFwHostname; }
const tstring& FwUsername() const { return m_strFwUsername; }
const tstring& FwPassword() const { return m_strFwPassword; }
USHORT FwPort() const { return m_ushFwPort; }
const CFirewallType& FwType() const { return m_FwType; }
private:
tstring m_strHostname; ///< name or ip-address of the ftp-server
USHORT m_ushHostport; ///< port of the ftp-server
tstring m_strUsername; ///< username for ftp-server
tstring m_strPassword; ///< password for ftp-server
tstring m_strAccount; ///< account mostly needed on ftp-servers running on unix/linux
tstring m_strFwHostname; ///< name or ip-address of the firewall
tstring m_strFwUsername; ///< username for firewall
tstring m_strFwPassword; ///< password for firewall
USHORT m_ushFwPort; ///< port of the firewall
CFirewallType m_FwType; ///< type of firewall
};
/// Holds a response of a ftp-server.
class CReply
{
tstring m_strResponse;
/// Holds the reply code.
class CCode
{
TCHAR m_szCode[4];
public:
CCode()
{
std::fill_n(m_szCode, sizeof(m_szCode)/sizeof(TCHAR), 0);
}
LPCTSTR Value() const { return m_szCode; }
bool Set(const tstring& strCode)
{
if( strCode.length()!=3 ||
strCode[0]<_T('1') || strCode[0]>_T('5') ||
strCode[1]<_T('0') || strCode[1]>_T('5') )
{
std::fill_n(m_szCode, sizeof(m_szCode)/sizeof(TCHAR), 0);
return false;
}
std::copy(strCode.begin(), strCode.end(), m_szCode);
return true;
}
bool IsPositiveReply() const { return IsPositivePreliminaryReply() || IsPositiveCompletionReply() || IsPositiveIntermediateReply(); }
bool IsNegativeReply() const { return IsTransientNegativeCompletionReply() || IsPermanentNegativeCompletionReply(); }
bool IsPositivePreliminaryReply() const { return m_szCode[0] == _T('1'); }
bool IsPositiveCompletionReply() const { return m_szCode[0] == _T('2'); }
bool IsPositiveIntermediateReply() const { return m_szCode[0] == _T('3'); }
bool IsTransientNegativeCompletionReply() const { return m_szCode[0] == _T('4'); }
bool IsPermanentNegativeCompletionReply() const { return m_szCode[0] == _T('5'); }
bool IsRefferingToSyntax() const { return m_szCode[1] == _T('0'); }
bool IsRefferingToInformation() const { return m_szCode[1] == _T('1'); }
bool IsRefferingToConnections() const { return m_szCode[1] == _T('2'); }
bool IsRefferingToAuthenticationAndAccounting() const { return m_szCode[1] == _T('3'); }
bool IsRefferingToUnspecified() const { return m_szCode[1] == _T('4'); }
bool IsRefferingToFileSystem() const { return m_szCode[1] == _T('5'); }
} m_Code;
public:
bool Set(const tstring& strResponse)
{
m_strResponse = strResponse;
if( m_strResponse.length()>2 )
return m_Code.Set(m_strResponse.substr(0, 3));
return false;
}
const tstring& Value() const { return m_strResponse; }
const CCode& Code() const { return m_Code; }
};
}
#endif // INC_FTPDATATYPES_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -