#ifndef __SERVERCAPABILITIES_H__
#define __SERVERCAPABILITIES_H__

enum capabilities
{
	unknown,
	yes,
	no
};

enum capabilityNames
{
	resume2GBbug,
	resume4GBbug,

	// FTP-protocol specific
	syst_command, // reply of SYST command as option
	feat_command,
	clnt_command, // set to 'yes' if CLNT should be sent
	utf8_command, // set to yes if OPTS UTF8 ON should be sent
	mlsd_command,
	mfmt_command,
	pret_command,
	mdtm_command,
	size_command,

	mode_z_support,

	list_hidden_support // LIST -a command
};

class CCapabilities
{
public:
	enum capabilities GetCapability(enum capabilityNames name, wxString* pOption = 0) const;
	void SetCapability(enum capabilityNames name, enum capabilities cap, const wxString& option = _T(""));

protected:
	struct t_cap
	{
		enum capabilities cap;
		wxString option;
	};
	std::map<enum capabilityNames, struct t_cap> m_capabilityMap;
};

class CServerCapabilities
{
public:
	// If return value isn't 'yes', pOptions remains unchanged
	static enum capabilities GetCapability(const CServer& server, enum capabilityNames name, wxString* pOption = 0);

	static void SetCapability(const CServer& server, enum capabilityNames name, enum capabilities cap, const wxString& option = _T(""));

protected:
	static std::map<CServer, CCapabilities> m_serverMap;
};

#endif //__SERVERCAPABILITIES_H__


syntax highlighted by Code2HTML, v. 0.9.1