1 | // |
2 | // FTPSClientSession.h |
3 | // |
4 | // Library: Net |
5 | // Package: FTP |
6 | // Module: FTPSClientSession |
7 | // |
8 | // Definition of the FTPSClientSession class. |
9 | // |
10 | // Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. |
11 | // and Contributors. |
12 | // |
13 | // SPDX-License-Identifier: BSL-1.0 |
14 | // |
15 | |
16 | |
17 | #ifndef NetSSL_FTPSClientSession_INCLUDED |
18 | #define NetSSL_FTPSClientSession_INCLUDED |
19 | |
20 | |
21 | #include "Poco/Net/NetSSL.h" |
22 | #include "Poco/Net/FTPClientSession.h" |
23 | |
24 | |
25 | namespace Poco { |
26 | namespace Net { |
27 | |
28 | |
29 | class NetSSL_API FTPSClientSession : |
30 | public Poco::Net::FTPClientSession |
31 | { |
32 | public: |
33 | FTPSClientSession(); |
34 | /// Creates an FTPSClientSession. |
35 | /// |
36 | /// Passive mode will be used for data transfers. |
37 | |
38 | explicit FTPSClientSession(const StreamSocket& socket, bool readWelcomeMessage = true, bool tryUseFTPS = true); |
39 | /// Creates an FTPSClientSession using the given |
40 | /// connected socket for the control connection. |
41 | /// |
42 | /// Passive mode will be used for data transfers. |
43 | |
44 | FTPSClientSession(const std::string& host, |
45 | Poco::UInt16 port = FTP_PORT, |
46 | const std::string& username = "" , |
47 | const std::string& password = "" ); |
48 | /// Creates an FTPSClientSession using a socket connected |
49 | /// to the given host and port. If username is supplied, |
50 | /// login is attempted. |
51 | /// |
52 | /// Passive mode will be used for data transfers. |
53 | |
54 | virtual ~FTPSClientSession(); |
55 | |
56 | void tryFTPSmode(bool bTryFTPS); |
57 | /// avoid or require TLS mode |
58 | |
59 | bool isSecure() const; |
60 | /// Returns true if the session is FTPS. |
61 | |
62 | protected: |
63 | virtual StreamSocket establishDataConnection(const std::string& command, const std::string& arg); |
64 | /// Create secure data connection |
65 | |
66 | virtual void receiveServerReadyReply(); |
67 | /// Function that read server welcome message after connetion and set and make secure socket |
68 | |
69 | private: |
70 | bool _tryFTPS = true; |
71 | |
72 | void beforeCreateDataSocket(); |
73 | ///Send commands to check if we can encrypt data socket |
74 | |
75 | void afterCreateControlSocket(); |
76 | ///Send commands to make SSL negotiating of control channel |
77 | |
78 | bool _secureDataConnection = false; |
79 | }; |
80 | |
81 | |
82 | // |
83 | // inlines |
84 | // |
85 | |
86 | inline bool FTPSClientSession::isSecure() const |
87 | { |
88 | if (_pControlSocket != nullptr) |
89 | return _pControlSocket->secure(); |
90 | return false; |
91 | } |
92 | |
93 | |
94 | } |
95 | } // namespace Poco::Net |
96 | |
97 | |
98 | #endif // #define NetSSL_FTPSClientSession_INCLUDED |