Qore Programming Language  1.12.0
QoreFtpClient.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreFtpClient.h
4 
5  thread-safe Qore QoreFtpClient object
6 
7  Qore Programming Language
8 
9  Copyright (C) 2003 - 2022 Qore Technologies, s.r.o.
10 
11  Permission is hereby granted, free of charge, to any person obtaining a
12  copy of this software and associated documentation files (the "Software"),
13  to deal in the Software without restriction, including without limitation
14  the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  and/or sell copies of the Software, and to permit persons to whom the
16  Software is furnished to do so, subject to the following conditions:
17 
18  The above copyright notice and this permission notice shall be included in
19  all copies or substantial portions of the Software.
20 
21  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  DEALINGS IN THE SOFTWARE.
28 
29  Note that the Qore library is released under a choice of three open-source
30  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
31  information.
32 */
33 
34 #ifndef _QORE_QOREFTPCLIENT_H
35 
36 #define _QORE_QOREFTPCLIENT_H
37 
38 #include <qore/InputStream.h>
39 #include <qore/OutputStream.h>
40 
41 #define DEFAULT_FTP_CONTROL_PORT 21
42 #define DEFAULT_FTP_DATA_PORT 20
43 
44 #define DEFAULT_USERNAME "anonymous"
45 #define DEFAULT_PASSWORD "[email protected]"
46 
47 class FtpResp;
48 class Queue;
49 
51 
72  friend class qore_ftp_private;
73 public:
75 
81  DLLEXPORT QoreFtpClient(const QoreString *url, ExceptionSink* xsink);
82 
84  DLLEXPORT QoreFtpClient();
85 
87  DLLEXPORT ~QoreFtpClient();
88 
90 
95  DLLEXPORT int connect(ExceptionSink* xsink);
96 
98 
101  DLLEXPORT int disconnect();
102 
104 
112  DLLEXPORT int cwd(const char* dir, ExceptionSink* xsink);
113 
115 
121  DLLEXPORT QoreStringNode* pwd(ExceptionSink* xsink);
122 
124 
132  DLLEXPORT int put(const char* localpath, const char* remotename, ExceptionSink* xsink);
133 
135 
143  DLLEXPORT int put(InputStream* is, const char* remotename, ExceptionSink* xsink);
144 
146 
157  DLLEXPORT int get(const char* remotepath, const char* localname, ExceptionSink* xsink);
158 
160 
171  DLLEXPORT int get(const char* remotepath, OutputStream* os, ExceptionSink* xsink);
172 
174 
183  DLLEXPORT int putData(const void* data, size_t len, const char* remotename, ExceptionSink* xsink);
184 
186 
192  DLLEXPORT QoreStringNode* getAsString(const char* remotepath, ExceptionSink* xsink);
193 
195 
205  DLLEXPORT QoreStringNode* getAsString(ExceptionSink* xsink, const char* remotepath,
206  const QoreEncoding* encoding = QCS_DEFAULT);
207 
209 
216  DLLEXPORT BinaryNode* getAsBinary(const char* remotepath, ExceptionSink* xsink);
217 
219 
227  DLLEXPORT int rename(const char* from, const char* to, ExceptionSink* xsink);
228 
230 
238  DLLEXPORT QoreStringNode* list(const char* path, bool long_list, ExceptionSink* xsink);
239 
241 
248  DLLEXPORT int del(const char* file, ExceptionSink* xsink);
249 
251 
258  DLLEXPORT int mkdir(const char* remotepath, ExceptionSink* xsink);
259 
261 
268  DLLEXPORT int rmdir(const char* remotepath, ExceptionSink* xsink);
269 
271  DLLEXPORT int getPort() const;
272 
274  DLLEXPORT const char* getUserName() const;
275 
277  DLLEXPORT const char* getPassword() const;
278 
280  DLLEXPORT const char* getHostName() const;
281 
283 
289  DLLEXPORT void setURL(const QoreString *url, ExceptionSink* xsink);
290 
292 
295  DLLEXPORT QoreStringNode* getURL() const;
296 
298  DLLEXPORT void setPort(int p);
299 
301  DLLEXPORT void setUserName(const char* u);
302 
304  DLLEXPORT void setPassword(const char* p);
305 
307  DLLEXPORT void setHostName(const char* h);
308 
310 
312  DLLEXPORT int setSecure();
313 
315 
317  DLLEXPORT int setInsecure();
318 
320 
324  DLLEXPORT int setInsecureData();
325 
327 
330  DLLEXPORT bool isSecure() const;
331 
333 
336  DLLEXPORT bool isDataSecure() const;
337 
339 
342  DLLEXPORT const char* getSSLCipherName() const;
343 
345 
348  DLLEXPORT const char* getSSLCipherVersion() const;
349 
351  DLLEXPORT long verifyPeerCertificate() const;
352 
354  DLLEXPORT void setModeAuto();
355 
357  DLLEXPORT void setModeEPSV();
358 
360  DLLEXPORT void setModePASV();
361 
363  DLLEXPORT void setModePORT();
364 
366  DLLEXPORT const char* getMode() const;
367 
368  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
369  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, Queue* wq, QoreValue arg, int64 min_ms = 1000);
370  DLLEXPORT QoreHashNode* getUsageInfo() const;
371  DLLEXPORT void clearStats();
372 
374 
380  DLLEXPORT void setNetworkFamily(int family);
381 
383 
387  DLLEXPORT int getNetworkFamily() const;
388 
390 
406  DLLEXPORT QoreHashNode* getControlPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
407 
409 
425  DLLEXPORT QoreHashNode* getDataPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
426 
428 
444  DLLEXPORT QoreHashNode* getControlSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
445 
447 
463  DLLEXPORT QoreHashNode* getDataSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
464 
466 
472  DLLEXPORT QoreHashNode* sendControlMessage(const char* cmd, const char* arg, ExceptionSink* xsink);
473 
475 
477  DLLLOCAL void setTimeout(int timeout_ms);
478 
480 
482  DLLLOCAL int getTimeout() const;
483 
485  DLLLOCAL void setEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
486 
488  DLLLOCAL void setDataEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
489 
491  DLLLOCAL void setControlEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
492 
493  DLLLOCAL void cleanup(ExceptionSink* xsink);
494 
495 protected:
497  hashdecl qore_ftp_private* priv;
498 
499  DLLLOCAL QoreFtpClient(const QoreFtpClient&) = delete;
500  DLLLOCAL QoreFtpClient& operator=(const QoreFtpClient&) = delete;
501 };
502 
503 #endif // _QORE_QOREFTPCLIENT_H
DLLEXPORT const QoreEncoding * QCS_DEFAULT
the default encoding for the Qore library
holds arbitrary binary data
Definition: BinaryNode.h:41
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
Interface for private data of input streams.
Definition: InputStream.h:44
Interface for private data of output streams.
Definition: OutputStream.h:44
defines string encoding functions in Qore
Definition: QoreEncoding.h:83
provides thread-safe access to FTP servers through Qore data structures
Definition: QoreFtpClient.h:71
DLLLOCAL int getTimeout() const
returns the socket I/O timeout value as an integer in milliseconds
DLLEXPORT int disconnect()
disconnects from the remote host if connected
DLLEXPORT bool isDataSecure() const
returns the secure data connection parameter flag
DLLEXPORT QoreHashNode * getControlSocketInfo(ExceptionSink *xsink, bool host_lookup) const
returns information for the current control socket; the socket must be open
DLLEXPORT QoreFtpClient()
creates the object with no connection parameters
DLLEXPORT QoreHashNode * sendControlMessage(const char *cmd, const char *arg, ExceptionSink *xsink)
Sends a message on the control port and returns a FtpResponseInfo hash or nullptr (if an exception is...
DLLEXPORT const char * getSSLCipherName() const
returns the name of the SSL Cipher for the currently-connected control connection,...
DLLEXPORT void setPort(int p)
sets the port connection parameter
DLLLOCAL void setControlEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the event queue for the control socket
DLLEXPORT int cwd(const char *dir, ExceptionSink *xsink)
changes the working directory on the remote host
DLLEXPORT int getPort() const
returns the port number connection parameter
DLLEXPORT QoreHashNode * getControlPeerInfo(ExceptionSink *xsink, bool host_lookup) const
returns peer information for a connected control socket
DLLEXPORT int rename(const char *from, const char *to, ExceptionSink *xsink)
renames/moves a file on the remote server
DLLLOCAL void setDataEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the event queue for the data socket
DLLEXPORT void setModePASV()
sets the connection mode for the next connection to "PASV" (passive mode)
DLLEXPORT QoreHashNode * getDataSocketInfo(ExceptionSink *xsink, bool host_lookup) const
returns information for the current control socket; the socket must be open
DLLEXPORT int rmdir(const char *remotepath, ExceptionSink *xsink)
removes a directory on the remote server
DLLEXPORT int setInsecureData()
sets the secure data connection parameter flag
DLLEXPORT void setUserName(const char *u)
sets the user name connection parameter
DLLEXPORT int put(const char *localpath, const char *remotename, ExceptionSink *xsink)
sends a file from the local filesystem to the remote server
DLLEXPORT bool isSecure() const
returns the secure connection parameter flag
DLLLOCAL void setEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the same event queue for data and control sockets
DLLEXPORT const char * getUserName() const
returns the user name connection parameter
DLLEXPORT int putData(const void *data, size_t len, const char *remotename, ExceptionSink *xsink)
sends a file data io the remote server
DLLEXPORT const char * getSSLCipherVersion() const
returns the version string of the SSL Cipher for the currently-connected control connection,...
hashdecl qore_ftp_private * priv
private implementation of the object
Definition: QoreFtpClient.h:497
DLLLOCAL void setTimeout(int timeout_ms)
sets the socket I/O timeout value in milliseconds
DLLEXPORT QoreStringNode * getAsString(const char *remotepath, ExceptionSink *xsink)
gets a file from the remote server and returns it as a string
DLLEXPORT void setModeEPSV()
sets the connection mode for the next connection to "EPSV" (extended passive mode)
DLLEXPORT void setModePORT()
sets the connection mode for the next connection to "PORT"
DLLEXPORT long verifyPeerCertificate() const
returns the peer certificate verification code
DLLEXPORT const char * getMode() const
returns a string for the connection mode: "port", "pasv", "epsv", or "auto" if not connected and auto...
DLLEXPORT void setModeAuto()
sets the connection mode for the next connection to "auto"
DLLEXPORT QoreStringNode * getURL() const
returns a URL string representing the current connection parameters, caller owns the reference count ...
DLLEXPORT QoreStringNode * pwd(ExceptionSink *xsink)
returns the working directory on the remote host (caller owns the reference count returned)
DLLEXPORT int connect(ExceptionSink *xsink)
connects to the remote host and logs in
DLLEXPORT void setHostName(const char *h)
sets the host name connection parameter
DLLEXPORT const char * getPassword() const
returns the password connection parameter
DLLEXPORT void setNetworkFamily(int family)
sets the network family to use with new connections
DLLEXPORT int getNetworkFamily() const
returns the network family to use with new connections
DLLEXPORT int mkdir(const char *remotepath, ExceptionSink *xsink)
creates a directory on the remote server
DLLEXPORT void setPassword(const char *p)
sets the password connection parameter
DLLEXPORT int setInsecure()
unsets the secure connection parameter flag (to use the FTP protocol)
DLLEXPORT const char * getHostName() const
returns the hostname connection parameter
DLLEXPORT int get(const char *remotepath, const char *localname, ExceptionSink *xsink)
gets a file from the remote server and saves it on the local filesystem
DLLEXPORT int del(const char *file, ExceptionSink *xsink)
deletes the given file on the remote server
DLLEXPORT void setURL(const QoreString *url, ExceptionSink *xsink)
sets the connection parameters from a URL
DLLEXPORT int setSecure()
sets the secure connection parameter flag (to use the FTPS protocol)
DLLEXPORT QoreStringNode * list(const char *path, bool long_list, ExceptionSink *xsink)
returns a string listing the directory contents on the remote host (caller owns the reference count r...
DLLEXPORT QoreHashNode * getDataPeerInfo(ExceptionSink *xsink, bool host_lookup) const
returns peer information for a connected data socket
DLLEXPORT BinaryNode * getAsBinary(const char *remotepath, ExceptionSink *xsink)
gets a file from the remote server and returns it as a binary node
DLLEXPORT ~QoreFtpClient()
disconnects from the host if necessary and frees all memory associated with the object
This is the hash or associative list container type in Qore, dynamically allocated only,...
Definition: QoreHashNode.h:50
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:93
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:275