1#ifndef FTP_CLIENT_H
2#define FTP_CLIENT_H
3
4
5#include <stdio.h>
6#include <string>
7
8#include <File.h>
9#include <NetworkKit.h>
10#include "FileUploadClient.h"
11
12using std::string;
13
14
15/*
16 * Definitions for the TELNET protocol. Snarfed from the BSD source.
17 */
18#define IAC     255
19#define DONT    254
20#define DO      253
21#define WONT    252
22#define WILL    251
23#define xEOF    236
24
25
26class FtpClient : public FileUploadClient {
27	public:
28		FtpClient();
29		~FtpClient();
30
31		bool Connect(const string& server, const string& login,
32			const string& passwd);
33
34		bool PutFile(const string& local, const string& remote,
35			ftp_mode mode = binary_mode);
36
37		bool GetFile(const string& remote, const string& local,
38			ftp_mode mode = binary_mode);
39
40		bool MoveFile(const string& oldPath, const string& newPath);
41		bool ChangeDir(const string& dir);
42		bool PrintWorkingDir(string& dir);
43		bool ListDirContents(string& listing);
44		bool Chmod(const string& path, const string& mod);
45
46		void SetPassive(bool on);
47
48	protected:
49		enum {
50			ftp_complete = 1UL,
51			ftp_connected = 2,
52			ftp_passive = 4
53		};
54
55		bool _TestState(unsigned long state);
56		void _SetState(unsigned long state);
57		void _ClearState(unsigned long state);
58
59		bool _SendRequest(const string& cmd);
60		bool _GetReply(string& outString, int& outCode, int& codeType);
61		bool _GetReplyLine(string& line);
62		bool _OpenDataConnection();
63		bool _AcceptDataConnection();
64
65		unsigned long fState;
66		BNetEndpoint* fControl;
67		BNetEndpoint* fData;
68
69};
70
71#endif	// FTP_CLIENT_H
72