1 #ifndef FILEZILLA_ENGINE_FTP_RAWTRANSFER_HEADER
2 #define FILEZILLA_ENGINE_FTP_RAWTRANSFER_HEADER
3 
4 #include "ftpcontrolsocket.h"
5 
6 enum rawtransferStates
7 {
8 	rawtransfer_init = 0,
9 	rawtransfer_type,
10 	rawtransfer_port_pasv,
11 	rawtransfer_rest,
12 	rawtransfer_transfer,
13 	rawtransfer_waitfinish,
14 	rawtransfer_waittransferpre,
15 	rawtransfer_waittransfer,
16 	rawtransfer_waitsocket
17 };
18 
19 class CFtpRawTransferOpData final : public COpData, public CFtpOpData
20 {
21 public:
CFtpRawTransferOpData(CFtpControlSocket & controlSocket)22 	CFtpRawTransferOpData(CFtpControlSocket& controlSocket)
23 		: COpData(PrivCommand::rawtransfer, L"CFtpRawTransferOpData")
24 		, CFtpOpData(controlSocket)
25 	{
26 	}
27 
28 	virtual int Send() override;
29 	virtual int ParseResponse() override;
30 
31 	std::wstring GetPassiveCommand();
32 	bool ParsePasvResponse();
33 	bool ParseEpsvResponse();
34 
35 	std::wstring cmd_;
36 
37 	CFtpTransferOpData* pOldData{};
38 
39 	bool bPasv{true};
40 	bool bTriedPasv{};
41 	bool bTriedActive{};
42 
43 	std::wstring host_;
44 	int port_{};
45 };
46 
47 #endif
48